schleife in latex < LaTeX < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Ich schreibe momentan ein paar serienbriefe. Um die Anhänge und das Anschreiben zusammenzufügen, habe ich eine externe Datei angelegt. Die sieht so aus:
documentclass[pdflatex,a4paper]{article}
usepackage{pdfpages}
begin{document}
includepdf[pages=1, frame=false]{Zugriff/Vorlage}
includepdf[pages=-, frame=false]{Zugriff/cvee}
includepdf[pages=-, frame=false]{Zugriff/info}
includepdf[pages=-, frame=false, landscape]{Zugriff/Versicherung}
includepdf[pages=-, frame=false]{Zugriff/nachweis}
end{document}
(ich hab die \ weggelassen, sonst wird das so komisch angezeigt)
Die Datei Vorlage enthält dabei ca. 26 Anschreiben an unterschiedliche Empfänger, die aber alle die gleichen Anhänge bekommen sollen. |
Meine Frage:
Gibt es eine Möglichkeit in Latex eine Schleife zu programmieren für die Seitenzahl, so dass Latex sich immer eine Seite der Datei Vorlage nimmt, und diese dann mit den anderen Anhängen zu einer pdf-Datei vereint, ohne dass ich 26 Durchläufe machen muss?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:36 Mi 22.07.2009 | Autor: | Sigma |
Hallo,
hier wird dir geholfen.
Gruß Sigma
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:53 Mi 22.07.2009 | Autor: | ps_tricks |
Das trifft irgendwie nicht ganz das, was ich gerne hätte.
Ich hätte sozusagen gerne dass ich folgendes habe:
documentclass[pdflatex,a4paper]{article}
usepackage{pdfpages}
begin{document}
includepdf[pages=i, frame=false]{Zugriff/Vorlage}
includepdf[pages=-, frame=false]{Zugriff/cvee}
includepdf[pages=-, frame=false]{Zugriff/info}
includepdf[pages=-, frame=false, landscape]{Zugriff/Versicherung}
end{document}
wobei i=1...26 läuft und dass dann automatisch (wenn möglich) auch 26 (unabhängig voneinander) pdfs von Latex erzeugt werden. Kann mir da jemand helfen?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:42 Mi 22.07.2009 | Autor: | rainerS |
Hallo!
> Ich schreibe momentan ein paar serienbriefe. Um die
> Anhänge und das Anschreiben zusammenzufügen, habe ich
> eine externe Datei angelegt. Die sieht so aus:
> documentclass[pdflatex,a4paper]{article}
> usepackage{pdfpages}
> begin{document}
> includepdf[pages=1, frame=false]{Zugriff/Vorlage}
> includepdf[pages=-, frame=false]{Zugriff/cvee}
> includepdf[pages=-, frame=false]{Zugriff/info}
> includepdf[pages=-, frame=false,
> landscape]{Zugriff/Versicherung}
> includepdf[pages=-, frame=false]{Zugriff/nachweis}
> end{document}
> (ich hab die \ weggelassen, sonst wird das so komisch
> angezeigt)
Dafür gibt es [code]...[/code]
>
> Die Datei Vorlage enthält dabei ca. 26 Anschreiben an
> unterschiedliche Empfänger, die aber alle die gleichen
> Anhänge bekommen sollen.
> Meine Frage:
> Gibt es eine Möglichkeit in Latex eine Schleife zu
> programmieren für die Seitenzahl, so dass Latex sich immer
> eine Seite der Datei Vorlage nimmt, und diese dann mit den
> anderen Anhängen zu einer pdf-Datei vereint, ohne dass ich
> 26 Durchläufe machen muss?
Schau mal hier! LaTeX kann nur ein PDF schreiben.
Wenn du mehrere PDFs erzeugen willst, geht das nur mit externen Werkzeugen. Entweder du nimmst hinterher das PDF auseinander, oder du lässt LaTeX mehrmals laufen; am Ende der oben verlinkten Seite gibt's dazu ein Weblink.
Eine einfache Methode ist auch diese: du ersetzt die Seitenzahl i in deiner Datei durch ein Kommando, zum Beispiel \MeineNummer und setzt das beim Aufruf, etwa so:
latex "\newcommand\MeineNummer{1} \input{start.tex}"
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:30 Mi 22.07.2009 | Autor: | Sigma |
Ich bins nochmal,
versuch es doch mal so.
Beispieldokument: test.tex
1: | \documentclass[12pt,twoside,a4paper]{article}
| 2: | \begin{document}
| 3: | Dies ist die \Para. Seite.
| 4: | \end{document} |
Und nun eine Batchdatei welche 5 PDF's erstellt
for /L %%N IN (1, 1, 5) DO pdflatex -jobname test%%N "\def\Para{%%N}\input test"
gruß Sigma
PS Klappt bei mir prima.Erzeugt 5 PDF Dokumente nacheinander. Würde mich über Rückmeldung von dir freuen.
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 10:09 Do 23.07.2009 | Autor: | ps_tricks |
Aufgabe | Super. Danke. Es klappt! |
Aber jetzt um das ganze noch zu perfiktionieren, noch eine klitzekleine Frage: Ich habs leider mit programmieren nicht so ganz. Ich hätte jetzt gerne, dass die Dateien automatisch den Namen des Empfängers tragen, also Empfänger.pdf. Wie müsste das dann machen?
(Ich habe die Adressen in eine externe .adr-Datei gepackt)
Wenn mir nochmal jemand helfen könnte wäre ich sehr dankbar!
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:25 Do 23.07.2009 | Autor: | Sigma |
Hallo,
welche Version klappt? die mit dem Batch? Wie sieht den deine Adressdatei aus? Wie werden die einzelnen Datensätze getrennt?
Sieht deine Adressdatei zufällig so aus?
1: | \adrentry{Meyer}{Horst}{Zeisigweg 12\\12002 Berlin}{m}{}{}{Steuermann}{MEYER}
| 2: | \adrentry{Schmidt}{Volker}{Drosselweg 2\\12005 Berlin}{m}{}{}{Ruderer}{SCHMIDT}
| 3: | \adrentry{Müller}{Thomas}{Wachtelweg 64\\12001 Berlin}{m}{}{}{Ruderer}{MUELLER}
| 4: | \adrentry{Bloch}{Monika}{Starweg 54\\12012 Berlin}{w}{}{}{Steuerfrau}{BLOCH}
| 5: | \adrentry{Wolter}{Sybille}{Finkenweg 98a\\12001 Berlin}{w}{}{}{Ruderin}{WOLTER} |
Bei mir funktioniert folgendes recht gut. Wobei der Parameter über alle Adressen läuft. Es müssen also beim einfügen der PDF-Seiten in die Dokumente mindest soviele Seiten vorhanden sein.
1: |
| 2: | chcp 1252
| 3: | set /a test=0
| 4: | fOR /F "tokens=2 delims={}" %%G IN (adress.txt) DO set "name1=%%G" &set /a test=test+1 &call :sub
| 5: | pause
| 6: | goto :eof
| 7: |
| 8: | :sub
| 9: | pdflatex -jobname %name1% "\def\Para{%test%}\input LaTeX1"
| 10: | goto :eof
|
Gruß Sigma
|
|
|
|
|
Ja die Batch-Datei hat funktioniert, und die Adressdatei sieht so aus. Es funktioniert jetzt auch mit dem Dateinamen. Danke nochmal Sigma!!
Eine abschließende Frage habe ich noch, um die Syntax zu verstehen.
Wo steht der Befehl für den Dateinamen (also, wenn ich die Datei z.B. nach dem Vornamen, Straßennamen, oder sonstige Information aus der Adressdatei benennen möchte, was muss ich da ändern?)?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:25 Do 23.07.2009 | Autor: | Sigma |
Hallo,
freut mich das es funktioniert.
Hier zum Beispiel mit Nachname und Vorname getrennt mit Bindestrich.
token ist die n-te Marke im Datensatz und dann einfach alphabetisch hochzählen %%G,%%H
1: | chcp 1252
| 2: | set /a test=0
| 3: | fOR /F "tokens=2,3 delims={}" %%G IN (adress.txt) DO set "name1=%%G" &set "name2=%%H" &set /a test=test+1 &call :sub
| 4: | pause
| 5: | goto :eof
| 6: |
| 7: | :sub
| 8: | pdflatex -jobname %name1%-%name2% "\def\Para{%test%}\input LaTeX1"
| 9: | goto :eof |
gruß sigma
PS. chcp ist notwendig damit die Umlaute aus der Adressdatei richtig dargestellt werden.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:25 Do 23.07.2009 | Autor: | ps_tricks |
Jetzt ist mir alles klar. Tausend Dank!!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:04 Fr 24.07.2009 | Autor: | ps_tricks |
Ne, sorry Sigma, is mir doch noch nicht so ganz klar. Ich hab grad versucht das noch abzuändern. Wenn ich jetzt z.B. möchte, dass die Datei nach dem Beruf (also in deinem Bsp. Steuermann, Ruderer, etc.) benannt wird, dann hab ich jetzt :
%%M
1:
2: chcp 1252
3: set /a test=0
4: fOR /F "tokens=8 delims={}" %%M IN (adress.txt) DO set "name1=%%M" &set /a test=test+1 &call :sub
5: pause
6: goto :eof
7:
8: :sub
9: pdflatex -jobname %name1% [mm] "\def\Para{%test%}\input [/mm] LaTeX1"
10: goto :eof
aber das klappt irgendwie nicht so wies soll.
Könntest du mir das doch noch mal ganz langsam erklären, dass ichs auch versteh...
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:39 Fr 24.07.2009 | Autor: | Sigma |
Hallo,
hast du mal andere Token ausprobiert.
Das Problem ist das die Token mit leeren Zeichenketten nicht mitgezählt werden. In den Datensätzen sind dies die beiden nach dem Geschlecht.
Somit steht der Beruf schon an 6. Stelle. Wenn also in deinen Datensätzen an verschiedenen stellen leere Zeichenketten auftauchen, wird das Problem um einiges komplizierter.
Gruß Sigma
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:48 Fr 24.07.2009 | Autor: | ps_tricks |
ok, alles klar, ich hab jetzt halt die Adressdatei adress.txt nach meinen bedürfnissen geändert, so dass es beliebig klappt.
Danke!
|
|
|
|