Dateinamen eingebundener Dateien (\input) ausgeben

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Lenzemann
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 4. Mär 2018, 06:18

Dateinamen eingebundener Dateien (\input) ausgeben

Beitrag 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

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag 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?
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Lenzemann
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 4. Mär 2018, 06:18

Beitrag 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]

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Na aber mit \currfilename hast du doch quasi schon gefunden, was du suchst?
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Lenzemann
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 4. Mär 2018, 06:18

Beitrag 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

Gast

Beitrag 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.

Gast

Beitrag 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}

Lenzemann
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 4. Mär 2018, 06:18

Beitrag 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!

Stamm-

Passendes Paket

Beitrag 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}

Gast

Beitrag 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}

Antworten