Automatisches Einbinden mehrerer Dateien mit einer Schleife

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


Theresa
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mo 6. Mai 2013, 21:18

Automatisches Einbinden mehrerer Dateien mit einer Schleife

Beitrag 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:
\item beispiel1
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

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag 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

Noch so einer

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

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag von Sepp99 »

Weitere gute Erklärung zu Zählern auch unter http://www.matheplanet.com/matheplanet/ ... php?id=460 Kapitel 6.

Gruß, Sepp

Theresa
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mo 6. Mai 2013, 21:18

Beitrag 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

Theresa
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mo 6. Mai 2013, 21:18

Beitrag 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

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag 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

Theresa
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mo 6. Mai 2013, 21:18

Danke!

Beitrag von Theresa »

Yay, superschnelle, supertolle Hilfe! Funktioniert genauso wie es soll und ich es möchte! Dankeschön!

Antworten