Erzeugen von zwei PDFs aus einer tex-Datei

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Erzeugen von zwei PDFs aus einer tex-Datei

Re: Erzeugen von zwei PDFs aus einer tex-Datei

von gast » Fr 31. Jul 2020, 13:09

Eigentlich ist es deine Aufgabe ein Minimalbeispiel des Problems zu erstellen …

\documentclass{article}
\def\englishname{test-english}
\makeatletter\@onelevel@sanitize\englishname\makeatother
\edef\cmdname{\jobname}
\makeatletter\@onelevel@sanitize\cmdname\makeatother
\ifx\cmdname\englishname
  \typeout{\jobname\space = \englishname}
  \usepackage[main=english,ngerman]{babel}
\else
  \typeout{\jobname\space != \englishname}
  \usepackage{shellesc}
  \ShellEscape{pdflatex -jobname=\englishname\space \jobname}

  \usepackage[main=ngerman,english]{babel}
\fi
\usepackage{blindtext}

\begin{document}
\tableofcontents
\blinddocument
\end{document}

Angenommen, diese Datei heißt test.tex. Dann werden beim Aufruf »pdflatex -shell-escape test.tex« zwei Dateien test.pdf und test-english.pdf erzeugt, weil bei jeden Aufruf eben auch ein Aufruf »pdflatex -jobname=test-english test« erfolgt. Der \@onelevel@sanitize-Aufruf ist notwendig, weil die catcodes von \jobname und einem normal per \def definierten String sonst eventuell nicht übereinstimmen, so dass »test-english« und »\jobname« zwar eventuell dieselben Zeichen aber nicht dieselben Token sind und dann \ifx fehlschlagen würde.

Natürlich kann man auch die Unterscheidung statt über \jobname auch über ein Markermakro machen. Man kann auch wirklich zwei Dateien erzeugen und dann zwei \ShellEscapeAufrufe machen. Es ist extrem vieles möglich. Allerdings hat man bei diesem Vorgehen eben auch das Problem, dass Fehler in der Datei dann in zwei verschiedenen Log-Dateien stehen. Im Beispiel wird auch ein interaktiver pdflatex-Aufruf gestartet. Da muss man also ggf. neben Option -jobname auch noch Option -interaction mit passendem Wert versehen.

Das ist alles etwas für Leute, die auch Manual-Pages lesen können. Rainer User und überhaupt jedem, der den oben gezeigten Code auch mit der Anleitung seiner TeX-Distribution und der verwendeten Pakete nicht versteht, würde ich hingegen zwei Dokumente empfehlen, denn tatsächlich hat man ja ohnehin zwei Dokumente, nur eben in einem verwurstelt.

Re: Erzeugen von zwei PDFs aus einer tex-Datei

von Tassadar » Fr 31. Jul 2020, 12:18

Vielen Dank für die Antwort!

Die Motivation hinter meinem Ganzen vorgehen ist ja gerade, dass ich nicht zwei separate tex-files habe die ich parallel bei Bedarf aktualisieren muss. Dann würde ich eher das jetzige Vorgehen bevorzugen, dass ich ein tex-file habe und den switch zwischen den Kompilationen ändere.

Du hast eine Möglichkeit mit shell-escape angesprochen. Könntest du da vielleicht drauf eingehen oder ein kleines Beispiel geben?

Re: Erzeugen von zwei PDFs aus einer tex-Datei

von gast » Do 30. Jul 2020, 18:46

Einfach zwei tex-Dateien daraus machen und in beiden den Schalter unterschiedlich stellen.

Eine einzelner tex-Lauf kann nie zwei PDFs erzeugen. Man kann natürlich mit shell-escape aus einem tex-Dokument zwei erzeugen und für jedes einen LaTeX-Lauf starten. Das geht aber auch einfach mit einem Skript, das zwei LaTeX-Läufe startet. Man könnte auch in einem PDF beide Sprachversionen hintereinander erzeugen. Das kann man dann ggf. nachträglich zerteilen. Aber bringt auch nicht mehr, als zwei LaTeX-Läufe.

Erzeugen von zwei PDFs aus einer tex-Datei

von Tassadar » Do 30. Jul 2020, 17:11

Hallo alle zusammen,

ich habe vor kurzem mein komacv-Lebenslauf so umgeschrieben, dass ich ihn entweder in Deutsch oder in Englisch kompilieren kann. Konkret verwende ich ein if-Statement und an den entsprechenden Stellen \if \else \fi Abfragen um entweder den Deutschen oder den Englischen Inhalt einzufügen.

Gibt es irgendeine Möglichkeit das Ganze so zu erweitern oder umzuschreiben, dass wenn die Datei kompiliert wird, zwei PDFs erzeugt werden? Einmal mit dem if-Statement true und einmal false? Sodass beim Kompilieren automatisch die Deutsche und die Englische Version erzeugt werden ohne, dass ich im Code das Statement verändern und zweimal kompilieren muss?

Vielen Dank im Voraus!


Nach oben