Dateinamen eingebundener Dateien (\input) ausgeben

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Dateinamen eingebundener Dateien (\input) ausgeben

von Lenzemann » So 4. Mär 2018, 20:06

Hey Leute,

damit kann ich was anfangen. Dann will mich mein Dokument mal tüfteln.
Ihr seid klasse.

Vieeelen Dank!
Christian Lenz

von Gast » So 4. Mär 2018, 17:03

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}

Passendes Paket

von Stamm- » So 4. Mär 2018, 16:26

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}

von Lenzemann » So 4. Mär 2018, 15:34

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!

von Gast » So 4. Mär 2018, 15:09

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}

von Gast » So 4. Mär 2018, 15:04

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.

von Lenzemann » So 4. Mär 2018, 14:41

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

von Johannes_B » So 4. Mär 2018, 14:34

Na aber mit \currfilename hast du doch quasi schon gefunden, was du suchst?

von Lenzemann » So 4. Mär 2018, 14:23

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]

von Johannes_B » So 4. Mär 2018, 06:58

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?

Nach oben