Hallo,

ich habe jetzt kein passendes Minimalbeispiel zur Hand, aber im Grunde gehts eigentlich nur um folgende Schleife:

Open in writeLaTeX
\newwrite\outfile

\newcounter{ct}

\forloop{ct}{1}{\value{ct} < 27}
    {\IfFileExists{./anhang/\Alph{ct}.tex}
    {\anhang{./anhang/\Alph{ct}}}
    {\typeout{Die Datei \Alph{ct}.tex ist nicht Vorhanden}}
    }

Durch diese Schleife füge ich einzelne Dateien in ein Dokument, ohne jedes Mal einen \include-Befehl zu setzen. Dabei liegen die Dateien in einen bestimmten Ordner und werden mit Großbuchstaben des Alphabets benannt wie z.B. A, B, C, usw. Jetzt möchte ich aber nicht, dass die Dateien alle nur einen Buchstaben haben, sondern eventuell noch mehr aussagen wie z.B. A-Funktionsanalyse.

Vorher hatte ich die Dateien einzelnen includiert. Aber um mir die ganzen Befehle zu sparen, habe ich diese Schleife angewendet. So muss ich mir nur immer eine neue tex-Datei erstellen mit einem weiteren Buchstaben.

Jemand eine Idee?

gefragt 12 Dez '14, 16:57

Giovario's gravatar image

Giovario
413132126
Akzeptiert-Rate: 0%

bearbeitet 13 Dez '14, 10:51

cgnieder's gravatar image

cgnieder
22.1k253463

Eine Möglichkeit wäre sicher pythontex zu verwenden, ähnlich wie hier: http://texwelt.de/wissen/fragen/9344/wie-kann-ich-sehr-viele-tex-dateien-einlesen

(12 Dez '14, 17:19) feynman

Das mit expl3 definierte \inputloop kann zwei Sachen:

  • Es kann Namen in einer Schleife konstruieren: \inputloop{test0}[1-10] wird die Dateien test01.tex, test02.tex, usw. bis test010.tex einbinden.
  • Mit \inputloop{test01.tex,test05.tex} werden test01.tex und test05.tex eingebunden. Enthält der Dateiname ein Komma muss man natürlich \inputloop{test01.tex,{file,with,comma.tex},test05.tex} machen.

Open in writeLaTeX
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\cs_new_protected:Npn \giovario_inputfile:n #1
 {
  \file_if_exist:nTF { #1 }
  {
   \msg_term:n { Inputting ~ #1 }
   \file_input:n { #1 }
  }
  {
   \msg_term:n { File ~ #1 ~ not ~ found! }
  }
 }

\cs_new_protected:Npn \giovario_intloop:nww #1#2-#3\scan_stop:
 {
  \int_step_inline:nnnn { #2 } { 1 } { #3 }
   {
    \giovario_inputfile:n { #1 ##1 .tex }
   }
 }

\cs_new_protected:Npn \giovario_fileloop:n #1
 {
  \clist_map_inline:nn { #1 }
   {
    \giovario_inputfile:n { ##1 }
   }
 }

\NewDocumentCommand \inputloop { m o }
 {
  \IfNoValueTF { #2 }
   {
    \giovario_fileloop:n { #1 }
   }
   {
    \giovario_intloop:nww { #1 } #2 \scan_stop:
   }
 }

\ExplSyntaxOff
\begin{document}
\inputloop{test0}[1-10]

\inputloop{test01.tex,test05.tex}
\end{document}
Permanenter link

beantwortet 14 Dez '14, 22:51

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 15 Dez '14, 10:22

\giovario_intloop:nn hat nur ein n dafür aber zwei w Argumente und sollte daher \giovario_intloop:nww heißen :)

(15 Dez '14, 00:12) cgnieder

@Clemens Sehr richtig, vielen Dank. Leider gibt es keine Warnung wenn man die Signatur falsch hat.

(15 Dez '14, 10:25) Henri

@Henri stimmt. Meinem Gefühl nach wäre übrigens das Quark \q_stop ein passenderer Begrenzer als \scan_stop:, auch wenn das von der Funktionalität keinen Vorteil bringt.

(16 Dez '14, 00:35) cgnieder

@Clemens Ich hab das mal nachgeschlagen und interface3.pdf sagt zu Scan Marks wie \scan_stop: "Like quarks, they can be used as delimiters in weird functions and are often safer to use for this purpose." (Part VII, Section 7: Scan Marks)

(16 Dez '14, 10:30) Henri

@Henri ja klar: wenn es aus Versehen passiert, dass ein Quark expandiert wird, dann landet man in einer Endlosschleife, \scan_stop: ist nur \relax.

(16 Dez '14, 13:45) cgnieder

Falls es für Dich ein gangbarer Weg ist, ein Makro zu definieren, das alle Dateinamen enthält, kannst Du mit den Listenmakros von etoolbox relativ einfach etwas in folgender Richtung machen:

Open in writeLaTeX
\documentclass{article}
\usepackage{etoolbox}

% Liste, die Dateinamen enthält:
\newcommand*\dateiliste{}
\forcsvlist{\listadd\dateiliste}{Mario,Lukas,Johann}

% Makro, das Dateinamen als Argument erhält, und damit etwas macht:
\newcommand*\verarbeitedatei[1]{Binde Datei `#1.tex' ein\ldots\par}

\begin{document}

\forlistloop{\verarbeitedatei}{\dateiliste}

\end{document}

alt text

Permanenter link

beantwortet 13 Dez '14, 10:49

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 13 Dez '14, 15:24

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×21
×5

gestellte Frage: 12 Dez '14, 16:57

Frage wurde gesehen: 11,200 Mal

zuletzt geändert: 16 Dez '14, 13:45