Seite 1 von 1
Automatisches Einbinden mehrerer Dateien mit einer Schleife
Verfasst: Di 7. Mai 2013, 06:15
von Theresa
Guten Morgen!
Nachdem mir letztens hier so gut geholfen wurde, habe ich mich mal angemeldet.
Gestern Abend hab ich schon fleissig das Forum nach Antworten auf meine Frage durchsucht, aber leider nicht das Richtige gefunden.
Ich möchte mehrere Dateien (1.tex, 2.tex, 3.tex usw) in meine Hauptdatei einbinden, leider stimmt da irgendwas nicht:
\documentclass[12pt]{article}
\usepackage{forloop}
\begin{document}
\begin{enumerate}
\newcounter{ct}
\forloop{ct}{1}{\value{ct} < 3}%
{%
\input{\myct}
}
\end{enumerate}
\end{document}
Die einzubindenden Dateien sehen immer so aus:
Wenn ich sie einzeln einbinde, also mit input{1}, input{2},... funktioniert es, nur die Schleife schimpft bei dem \input{\myct}- Befehl.
Ich nehme an, das \myct stimmt nicht. Wie lautet der Befehl denn richtig?
Schönen Tag, Theresa
Verfasst: Di 7. Mai 2013, 07:37
von Sepp99
Ein Ansatz dazu:
\documentclass[12pt]{article}
\usepackage{forloop}
\newcounter{ct}
\begin{document}
\begin{enumerate}
\forloop{ct}{1}{\value{ct} < 3}%
{%
\input{\arabic{ct}}
}
\end{enumerate}
\end{document}
Gruß, Sepp
Verfasst: Di 7. Mai 2013, 08:08
von Noch so einer
Ersetze einfach mal \myct durch \thect. Für einen \LaTeX-Zähler foo gilt:
- \newcounter{foo} definiert einen neuen Zähler namens foo und setzt ihn auf 0
- \value{foo} ist der Wert des LaTeX-Zählers foo (genau genommen ist es sogar der TeX-Zähler, der hinter dem LaTeX-Zähler steckt, so dass man nicht nur wie im Beispiel damit vergleichen kann, sondern ggf. auch lokal den Wert verändern kann; aber das ist eine andere Geschichte, die mit Deinem Problem nicht viel zu tun hat)
- \stepcounter{foo} erhöht den LaTeX-Zähler foo global um eins
- \refstepcounter{foo} erhöht den LaTeX-Zähler foo global und referenzierbar um ein; ein anschließendes \label (in derselben Gruppe) bezieht sich dann auf \p@foo\thefoo
- \p@foo ist ein interner Präfix für den LaTeX-Zähler foo, der nur von \label verwendet wird.
- \addtocounter{foo}{<Wert>} addiert <Wert> zum LaTeX-Zähler foo; <Wert> darf jede ganze Zahl sein (also auch negativ)
- \thefoo ist die konfigurierbare Ausgabe des LaTeX-Zählers, die bei \newcommand als \arabic{foo} vordefiniert wird
- \arabic{foo} ist die Ausgabe des LaTeX-Zählers als arabische Zahl
- \roman{foo} ist die Ausgabe des LaTeX-Zählers als kleine römische Zahl (i, ii, …)
- \Roman{foo} ist die Ausgabe des LaTeX-Zählers als große römische Zahl (I, II, …)
- \alph[foo} ist die Ausgabe des LaTeX-Zählers als Kleinbuchstabe (a, b, …)
- \Alph{foo} ist die Ausgabe des LaTeX-Zählers als Großbuchstabe (A, B, …)
- \fnsymbol{foo} ist die Ausgabe des LaTeX-Zählers als Fußnotensymbol
Mit diesem Wissen, und da ja eigentlich nicht die Dateien 1, 2, 3 etc., sondern 1.tex, 2.tex, 3.tex etc. geladen werden sollen, könnte man jetzt nach \newcounter{ct} auch noch ein \renewcommand*{\thect}{\arabic{ct}.tex} einfügen. Muss man aber nicht, weil TeX als Notfallmanagement bei \input selbst ein .tex anhängt. Allerdings ist von der Implementierung abhängig, ob das immer geschieht, oder nur, wenn eine Datei ohne diese Endung nicht gefunden wird.
Bei e-TeX (und das verwendet man heutzutage eigentlich immer, wenn man LaTeX verwendet), kann man auf \value{foo} übrigens auch noch mit \numexpr operieren. Aber das führt hier zu weit.
Verfasst: Di 7. Mai 2013, 08:28
von Sepp99
Weitere gute Erklärung zu Zählern auch unter
http://www.matheplanet.com/matheplanet/ ... php?id=460 Kapitel 6.
Gruß, Sepp
Verfasst: Di 7. Mai 2013, 11:06
von Theresa
Vielen lieben Dank an euch beide!
Beide Lösungen funktionieren, werde aber die \thect variante benutzen, finde ich schöner.
Vielen Dank auch für die ausführlichen Erklärungen und Weiterführungen!
Schönen Tag noch
Verfasst: Mo 1. Jul 2013, 21:00
von Theresa
Guten Abend!
Das mit dem Einbinden über den Zähler funktioniert perfekt. Aber: ich erweitere ja meinen Fragenkatalog ständig, und muss dann natürlich auch die Schleifenendbedingung anpassen. Gibt es denn einen Befehl, der von 1 bis x geht, und einfach abbricht, wenn er eine Datei nicht findet ohne einen Fehler zu erzeugen?
Danke, Theresa
Mein Grundgedanke war ja zuerst, einen Befehl zu finden, der ALLE dateien eines Ordners einbindet, aber den scheint es so nicht zu geben
Verfasst: Di 2. Jul 2013, 02:13
von Sepp99
Theresa hat geschrieben:Gibt es denn einen Befehl, der von 1 bis x geht, und einfach abbricht, wenn er eine Datei nicht findet ohne einen Fehler zu erzeugen?
Sollte mit \InputIfFileExists klappen. Aufbauend auf mein Beispiel oben und einer \whiledo-Schleife wieder ein Ansatz:
\listfiles
\documentclass[12pt]{article}
\usepackage{forloop}
\usepackage{ifthen}
\newcounter{ct}
\begin{document}
\begin{enumerate}
\forloop{ct}{1}{\value{ct} < 3}%
{%
\input{\arabic{ct}}
}
\end{enumerate}
\setcounter{ct}{0}%
\begin{enumerate}
\whiledo{\value{ct} < 9999}{\stepcounter{ct}%
\InputIfFileExists{\arabic{ct}}{}{}%
}
\end{enumerate}
Wieder weiterer Text.
\end{document}
Siehe dazu
http://tex.stackexchange.com/questions/ ... fileexists
Gruß, Sepp
Danke!
Verfasst: Di 2. Jul 2013, 13:31
von Theresa
Yay, superschnelle, supertolle Hilfe! Funktioniert genauso wie es soll und ich es möchte! Dankeschön!