Seite 1 von 2
Dateinamen eingebundener Dateien (\input) ausgeben
Verfasst: So 4. Mär 2018, 06:24
von Lenzemann
Hallo liebe Community,
ich bin neu hier und ein absoluter LaTeX-Neuling. Habe mich entschieden in Zukunft meine Arbeitsmaterialen mit LaTeX zu gestalten. Die Ergebnisse sind einfach zu überzeugend.
Nun habe ich aber ein Problem, bei dem Google und FAQ's mir nicht geholfen haben:
Ich würde gern in einer Haupt-Datei andere Dateien mit dem \input-Befehl einbinden. Es ist nun super wichtig, dass in der Haupt-Datei die Dateinamen der eingebundenen Dateien ausgegeben werden. Geht so etwas? So ähnlich wie \currfilename...
Vielen Dank an Euch,
Lenzemann
Verfasst: So 4. Mär 2018, 06:58
von Johannes_B
Ich verstehe die Frage nicht ganz. Input lädt den Inhalt der Dateien, quasi copy/paste in das main Dokument. Willst du den Dateinamen in der pdf?
Verfasst: So 4. Mär 2018, 14:23
von Lenzemann
Hey Johannes,
danke für deine Rückmeldung.
Im Prinzip will ich genau das. Der Name der eingebundenen Datei soll im fertigen PDF automatisch mit eingebunden werden. Ich habe also im System einzelne TEX-Bausteine, die ich auch über das ausgedruckte PDF wiederfinden können möchte.
Im Code:
\documentclass[11pt]{scrartcl}
\beginn{document}
\paragraph{Aufgabe1}
\input{../aufgaben/1803040309}
\Befehl{Automatisch "../aufgaben/1803040309" ausgeben}
\end{document}
----------
Natürlich könnte ich auch einfach den Dateinamen von Hand reinschreiben. Aber dann liefe ich Gefahr, dass ich das auch einmal vergesse oder falsch eintippe. Und damit wäre in meinem angedachten Ordnungssystem die eingebundene Aufgabe nicht mehr gezielt auffindbar.
Danke für deine Zeit!

Lenzemann[/b]
Verfasst: So 4. Mär 2018, 14:34
von Johannes_B
Na aber mit \currfilename hast du doch quasi schon gefunden, was du suchst?
Verfasst: So 4. Mär 2018, 14:41
von Lenzemann
Ja ja, wenn ich in die Datei 1803040309.tex den Befehl \currfilename schreibe, dann kriege ich schon die gewünschte Ausgabe. Aber auch hier ist das System nicht sicher, weil diese Befehlszeile in jeder von tausenden von Aufgabendateien stehen und händig geschrieben werden müsste.
Und wenn ich \currfilename in der "Masterdatei" schreibe, erhalte ich ja nur deren Dateinamen zurück.
Ich bräuchte einen Befehl in "Masterdatei", der die Namen der eingebunden Dateien schreibt.
Viele Grüße,
Lenzemann
Verfasst: So 4. Mär 2018, 15:04
von Gast
Verstehe ich nicht. Willst Du die Namen aller eingebundenen Dateien in der Masterdatei? Oder welcher Name soll in der Masterdatei ausgegeben werden?
Jedenfalls: Was hindert Dich daran, etwas wie
\newcommand*{\lastinputname}{\jobname.tex}
\newcommand*{\xinput}[1]{%
\renewcommand*{\lastinputname}{#1}%
\input{\lastinputname}
}
zu definieren und dann an Stelle von \input zu verwenden. Wenn da alle Dateinamen aufgesammelt werden sollen, muss man ggf. mit \g@addto@macro oder \protected@edef arbeiten.
Verfasst: So 4. Mär 2018, 15:09
von Gast
Möchtest Du soetwas?
\documentclass[11pt]{scrartcl}
\begin{filecontents}{hallo.tex}
Hullo
\end{filecontents}
\newcommand*{\inputmittext}[1]{%
\IfFileExists{#1}
{\input{#1}\par
Es wurde \texttt{\detokenize{#1}} ausgegeben.}
{\GenericError
{\string\inputmittext\space error}
{\string\inputmittext\space error: File `\detokenize{#1}' not found}
{The file `\detokenize{#1}' cold not be found, no output is produced.}
{The file `\detokenize{#1}' could not be found.\MessageBreak
Check that it is where you think it is.}}}
\begin{document}
\paragraph{Aufgabe1}
\inputmittext{hallo.tex}
\paragraph{Aufgabe2}
\inputmittext{ftaghb.tex}
\end{document}
Verfasst: So 4. Mär 2018, 15:34
von Lenzemann
Jaaaa

). Nur vielleicht noch eine kleine Ergänzung:
Kann man auch alle eingebundenen Dateien hintereinander ausgeben lassen? Etwa am Seitenende. So nach dem Prinzip:
Es wurden Datei1, Datei2, Datei3 ausgegeben.
Vieeelen Dank!
Passendes Paket
Verfasst: So 4. Mär 2018, 16:26
von Stamm-
Mir erscheint ein Ansatz mit »
currfile« viel weniger kompliziert. Auf die Idee bin ich aber nur gekommen, weil im Eingangsbeitrag schon
\currfilename erwähnt wurde. Mit
\newsavebox,
\savebox und
\usebox wird eine Box erzeugt, der jeweils aktuelle Dateiname darin zwischengespeichert und für die spätere Ausgabe bereitgestellt. Für das Beispiel hier habe ich mal etwas aus meinem Archiv genommen und entsprechend ergänzt. Es ist also nicht minimal.
\documentclass[11pt,a4paper,twoside,ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
adieresis={ä},
germandbls={ß},
Euro={€}
}
\usepackage{babel}
\usepackage[
inner=2cm,
outer=4cm,
top=2cm,
bottom=4cm,
includeheadfoot
]{geometry}
\usepackage[pagestyles,raggedright,bf,sf]{titlesec}
\newpagestyle{main}{%
\sethead[\thepage][][\thesection\enspace\sectiontitle]{\thesubsection\enspace\subsectiontitle}{}{\thepage}%
\setfoot[][][]{}{}{}%
\headrule%
}
\pagestyle{main}
\usepackage{currfile}
%% Im eigentlichen Dokument nicht notwendig, da nur für Erzeugung von Fülltext und externe Dateien
\usepackage{filecontents}
\begin{filecontents*}{input-01.tex}
\section{Erste Datei}
\blindtext
\newsavebox{\filenamei}
\savebox{\filenamei}{\currfilebase} % Für Dateinamen mit Endung '\currentfilename' setzen
\end{filecontents*}
\begin{filecontents*}{input-02.tex}
\section{Zweite Datei}
\blindtext
\newsavebox{\filenameii}
\savebox{\filenameii}{\currfilebase} % Für Dateinamen mit Endung '\currentfilename' setzen
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{lmodern}
\usepackage{microtype}
\usepackage{blindtext} % Nur für den Fülltext
\title{Dokument mit Inhalten aus externen Dateien}
\author{Lenzemann}
\clubpenalty10000%\maxdimen
\widowpenalty10000%\maxdimen
\begin{document}
\maketitle
\tableofcontents
\bigskip
\input{input-01}
\input{input-02}
\appendix
\section{Eingelesene externe Dateien}
\begin{itemize}
\item \usebox\filenamei
\item \usebox\filenameii
\end{itemize}
\end{document}
Verfasst: So 4. Mär 2018, 17:03
von Gast
Es gibt da mehrere Möglichkeiten.
\documentclass[11pt]{scrartcl}
\begin{filecontents}{hallo.tex}
Hullo
\end{filecontents}
\begin{filecontents}{bye.tex}
Goodbye
\end{filecontents}
\usepackage{etoolbox}
\newcommand*{\filesonthispage}{}
\newcommand*{\inputmittext}[1]{%
\IfFileExists{#1}
{\input{#1}%
\blfootnote{\texttt{\detokenize{#1}}}% <- Fußnote
\listeadd{\filesonthispage}{\detokenize{#1}}% <- Fußzeile
\par Es wurde \texttt{\detokenize{#1}} ausgegeben.% <- direkter Text
}
{\GenericError
{\string\inputmittext\space error}
{\string\inputmittext\space error: File `\detokenize{#1}' not found}
{The file `\detokenize{#1}' cold not be found, no output is produced.}
{The file `\detokenize{#1}' could not be found.\MessageBreak
Check that it is where you think it is.}}}
\newcounter{pagefilecounter}
\newcommand*{\printfilesfomthispage}{%
\setcounter{pagefilecounter}{0}%
\ifdefvoid{\filesonthispage}
{}
{\def\do##1{%
\stepcounter{pagefilecounter}%
\ifnumequal{\value{pagefilecounter}}{1}
{\texttt{##1}}
{, \texttt{##1}}}%
\dolistloop\filesonthispage
\global\let\filesonthispage\empty}}
% Fußzeile
\usepackage{scrlayer-scrpage}
\setkomafont{pageheadfoot}{\normalfont\normalcolor}
\ofoot{\printfilesfomthispage}
% die automatische Fußzeile funktioniert nur, wenn \printfilesfomthispage nicht im Text genutzt wird.
% siehe Seite 3
% Fußnote
\newcommand\blfootnote[1]{%
\begingroup
\renewcommand\thefootnote{}\footnote{#1}%
\addtocounter{footnote}{-1}%
\endgroup
}
\begin{document}
\paragraph{Aufgabe1}
\inputmittext{hallo.tex}
\paragraph{Aufgabe 2}
\inputmittext{bye.tex}
\cleardoublepage
Leerseite
\cleardoublepage
\paragraph{Aufgabe 3}
\inputmittext{bye.tex}
Bis jetzt haben wir \printfilesfomthispage{} ausgegeben.
\end{document}