pi-c
09-12-2015, 15:20
Hallo!
Bei größeren Projekten gehe ich so vor, dass ich in einer Datei die Präambel habe und von dort aus weitere Dateien mit Textteil, Anhang, Abbildungen etc. lade. In der Datei für den Textteil stehen dann Input- bzw. Include-Befehle für die Dateien mit den einzelnen Textkapiteln. Bisher habe ich diese Datei von der Bash aus gefüllt:
ls [0-9]*tex | sort | sed -e 's/^\(.\+\)$/\\include{\1}/' > text-input.tex
Lässt sich das vielleicht auch so gestalten, dass direkt von LaTeX aus die Dateien dynamisch geladen werden? Gesetzt den Fall, ich weiß, dass das Dokument einmal 10 Kapitel haben soll, die aber noch nicht alle vorliegen. Nehmen wir an, vorhanden seien die Kapitel 1, 2, 3, 6, 8. Die könnte ich nach obiger Methode laden; sie erscheinen dann in der richtigen Reihenfolge, aber wenn ich das Dokument compiliere, erhalte ich statt der Kapitelnummern 1, 2, 3, 6, 8 alle Kapitel fortlaufend nummeriert, also 1, 2, 3, 4, 5.
Ich würde jetzt gerne direkt in LaTeX eine Lösung haben, wo eine Schleife von 1 bis 10 läuft, in der geschaut wird, ob es eine Datei gibt, deren Name mit dem aktuellen Zählerwert beginnt und auf ".tex" endet. Wenn die Datei vorhanden ist, soll sie geladen werden, ansonsten soll der Wert für den Counter "chapter" um 1 erhöht werden. Damit hätte das Dokument, das ich bearbeite, dann zwar Lücken im Inhaltsverzeichnis, aber die Kapitelnummern wären schon so, wie sie in der Endversion sein sollen.
Mit dem Paket forloop kann ich die Schleife realisieren, und mit \IfFileExists kann man wohl feststellen, ob eine Datei existiert. Aber anscheinend kann man dabei nicht nach Wildcards suchen, oder? Das hier funktioniert jedenfalls nicht:
\newcounter{loop}
\forloop[1]{loop}{1}{\value{loop} < 10}{%
\IfFileExists{\arabic{loop}-*.tex}
{\noindent\arabic{loop}: File found\newline}
{\noindent\arabic{loop}: File not found\newline}%
}
Als Output erhalte ich dabei nur "File not found". Weiß vielleicht jemand, was da verkehrt läuft?
Falls ich \IfExistsFile dazu bewegen könnte, die Dateien zu finden, hätte ich aber immer noch das Problem, dass ich den genauen Dateinamen nicht kenne -- ich wüsste dann nur, dass es eine Datei, deren Name dem Muster entspricht, gibt. Wie kann ich an den Dateinamen kommen, damit ich die Datei dann auch per \include laden kann?
Beste Grüße
Andreas
Bei größeren Projekten gehe ich so vor, dass ich in einer Datei die Präambel habe und von dort aus weitere Dateien mit Textteil, Anhang, Abbildungen etc. lade. In der Datei für den Textteil stehen dann Input- bzw. Include-Befehle für die Dateien mit den einzelnen Textkapiteln. Bisher habe ich diese Datei von der Bash aus gefüllt:
ls [0-9]*tex | sort | sed -e 's/^\(.\+\)$/\\include{\1}/' > text-input.tex
Lässt sich das vielleicht auch so gestalten, dass direkt von LaTeX aus die Dateien dynamisch geladen werden? Gesetzt den Fall, ich weiß, dass das Dokument einmal 10 Kapitel haben soll, die aber noch nicht alle vorliegen. Nehmen wir an, vorhanden seien die Kapitel 1, 2, 3, 6, 8. Die könnte ich nach obiger Methode laden; sie erscheinen dann in der richtigen Reihenfolge, aber wenn ich das Dokument compiliere, erhalte ich statt der Kapitelnummern 1, 2, 3, 6, 8 alle Kapitel fortlaufend nummeriert, also 1, 2, 3, 4, 5.
Ich würde jetzt gerne direkt in LaTeX eine Lösung haben, wo eine Schleife von 1 bis 10 läuft, in der geschaut wird, ob es eine Datei gibt, deren Name mit dem aktuellen Zählerwert beginnt und auf ".tex" endet. Wenn die Datei vorhanden ist, soll sie geladen werden, ansonsten soll der Wert für den Counter "chapter" um 1 erhöht werden. Damit hätte das Dokument, das ich bearbeite, dann zwar Lücken im Inhaltsverzeichnis, aber die Kapitelnummern wären schon so, wie sie in der Endversion sein sollen.
Mit dem Paket forloop kann ich die Schleife realisieren, und mit \IfFileExists kann man wohl feststellen, ob eine Datei existiert. Aber anscheinend kann man dabei nicht nach Wildcards suchen, oder? Das hier funktioniert jedenfalls nicht:
\newcounter{loop}
\forloop[1]{loop}{1}{\value{loop} < 10}{%
\IfFileExists{\arabic{loop}-*.tex}
{\noindent\arabic{loop}: File found\newline}
{\noindent\arabic{loop}: File not found\newline}%
}
Als Output erhalte ich dabei nur "File not found". Weiß vielleicht jemand, was da verkehrt läuft?
Falls ich \IfExistsFile dazu bewegen könnte, die Dateien zu finden, hätte ich aber immer noch das Problem, dass ich den genauen Dateinamen nicht kenne -- ich wüsste dann nur, dass es eine Datei, deren Name dem Muster entspricht, gibt. Wie kann ich an den Dateinamen kommen, damit ich die Datei dann auch per \include laden kann?
Beste Grüße
Andreas