Wie erstelle ich automatisch mehrere Versionen eines Dokuments mit unterschiedlichen Papiergrößen und spiegele dies im generierten PDF-Dateinamen wider?

Wie erstelle ich automatisch mehrere Versionen eines Dokuments mit unterschiedlichen Papiergrößen und spiegele dies im generierten PDF-Dateinamen wider?

Ich nutze den moderncvKurs, um meinen Lebenslauf für Bewerbungen in den USA (wo das Standardpapierformat letter) und in Großbritannien (wo das Standardpapierformat A4) beträgt, vorzubereiten.

Hier ist eine MWEDatei namens main.tex.

% some preamble stuff before `documentclass` line
% blah blah (preamble)
% more blah blah (preamble)

\documentclass[11pt,a4paper,sans]{moderncv}  % <----- paper size is set here.

% a lot more preamble lines after `documentclass` line
\moderncvstyle{classic}
\usepackage{graphicx}

\firstname{John}
\familyname{Doe}

\address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061} 
\phone[mobile]{123 456 7890}
\email{[email protected]}
\photo[64pt][0.5pt]{example-image-a}


\begin{document}
   \makecvtitle
\end{document}

Wie gezeigt MWE, stehen einige meiner benutzerdefinierten Präambeln vor der documentclassZeile, während andere danach kommen.

Ich verwende latexmkzum Kompilieren des Dokuments lualatex. Wie kann ich nur eineinzel texQuelle und erstellen Sie automatisch zwei verschiedene Versionen des PDF-Dokumentspassend benannt Resume_A4paper.pdfund ? Ich bin gerne bereit , Zauberei und/oder externe Hilfsmittel Resume_letterpaper.pdfzu nutzen, um dies zu ermöglichen.directlua

Begründung

Beim vorliegenden Inhalt habe ich manuell überprüft, ob das Seitenlayout für beide Formate, A4 und Letter, in Ordnung ist. Ich möchte diesen Prozess nur für zukünftige kleinere Anpassungen automatisieren (Änderung von ein oder zwei Aufzählungspunkten im gesamten Lebenslauf, um ihn an jede Stellenbeschreibung anzupassen). Es wäre mühsam, manuell zwei verschiedene Versionen für jede Art von Job/Branche zu erstellen, für die ich mich bewerbe.

Antwort1

Auf meinem System speichere ich das folgende Beispiel alstest.texund ändern Sie in der Shell (über chdiroder cdoder was auch immer) das aktive Verzeichnis in das Verzeichnis, in demtest.texgespeichert ist, und dann kompilierentest.texdurch einen Anruflatexmkvon der Shell/Kommandozeile aus über

latexmk -cd -gg -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps- test.tex

(vielleicht benötigen Sie auf Ihrer Plattform --enable-write18stattdessen --shell-escape)

, dann während der erstenAbonnieren-run initiiert vonlatexmk, wo aux-Dateien am Anfang nicht existieren, ein weitereslatexmk-run wird eingeleitet, wobei die -jobnameOption - zum Anhängen der Phrase -letterpaperan die aktuelle Erweiterung von verwendet wird \jobname.

In jedem Fall wird geprüft, ob die Erweiterung des \jobname-Primitivs die Phrase enthält -letterpaper.

Wenn ja, wird die Option „Briefpapier“ an die Dokumentklasse übergeben.

Wenn nicht, wird die Option „a4paper“ an die Dokumentklasse übergeben.

Als Ergebnis haben Sie einelatexmk-lauf weitertest.texdie genau einmal eine andere initiiertlatexmk-lauf weitertest.texmit -jobname="test-letterpaper".

Am Ende erhältst dutest.pdfDas ist A4-Papier undtest-briefpapier.pdfdas ist Briefpapier.

Wenn Sie möchten, können Sie die -jobnameOption auch in der Shell/Befehlszeile angeben und beispielsweise Folgendes tun:

latexmk -cd -gg -jobname="test-a4paper" -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps- test.tex

(vielleicht benötigen Sie auf Ihrer Plattform --enable-write18stattdessen --shell-escape)

um zu bekommentest-a4papier.pdfUndtest-briefpapier.pdf.

\makeatletter
\RequirePackage{shellesc}% more recent releases of LuaTeX don't provide
                         % \write18 any more. This package makes sure
                         % under such LuaTeX \write18 is emulated by
                         % calls to \directlua.
\newcommand\CheckWhetherNull[1]{%
  \if\relax\detokenize{#1}\relax
  \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
}%
\newcommand\letterpaperphrase{-letterpaper}\@onelevel@sanitize\letterpaperphrase
\newcommand\Afourpaperphrase{-a4paper}\@onelevel@sanitize\Afourpaperphrase
%
\newcommand\gobbletoletterpaperphrase{}%
\expandafter\long\expandafter\def
\expandafter\gobbletoletterpaperphrase\expandafter#\expandafter1\letterpaperphrase{}%
%
\newcommand\gobbletoAfourpaperphrase{}%
\expandafter\long\expandafter\def
\expandafter\gobbletoAfourpaperphrase\expandafter#\expandafter1\Afourpaperphrase{}%
%
\newcommand\keepBeforeAfourpaperphrase{}%
\expandafter\long\expandafter\def
\expandafter\keepBeforeAfourpaperphrase
\expandafter#\expandafter1\Afourpaperphrase#2\relax{#1}%
%
\newcommand\CheckWhetherJobNameHasLetterpaperphrase{}%
\expandafter\def
\expandafter\CheckWhetherJobNameHasLetterpaperphrase
\expandafter{%
  \romannumeral0\expandafter\CheckWhetherNull\expandafter{%
     \romannumeral0\@firstofone{\expandafter\expandafter\expandafter} %
     \expandafter\gobbletoletterpaperphrase
     \romannumeral0\@firstofone{\expandafter\expandafter\expandafter} %
     \expandafter\jobname
     \letterpaperphrase
  }%
  { \@secondoftwo}%
  { \@firstoftwo}%
}%
\newcommand\CheckWhetherJobNameHasAfourpaperphrase{}%
\expandafter\def
\expandafter\CheckWhetherJobNameHasAfourpaperphrase
\expandafter{%
  \romannumeral0\expandafter\CheckWhetherNull\expandafter{%
     \romannumeral0\@firstofone{\expandafter\expandafter\expandafter} %
     \expandafter\gobbletoAfourpaperphrase
     \romannumeral0\@firstofone{\expandafter\expandafter\expandafter} %
     \expandafter\jobname
     \Afourpaperphrase
  }%
  { \@secondoftwo}%
  { \@firstoftwo}%
}%
\CheckWhetherJobNameHasLetterpaperphrase{%
  \PassOptionsToClass{letterpaper}{moderncv}%
}{%
  \PassOptionsToClass{a4paper}{moderncv}%
}%
\IfFileExists{\jobname.tex}{%
  \newcommand\myinfile{\jobname.tex}%
}{%
  \newcommand\myinfile{%
    \CheckWhetherJobNameHasAfourpaperphrase
      {\expandafter\keepBeforeAfourpaperphrase\jobname\relax}%
      {\jobname}.tex%
  }%
}%
\newcommand\createletterdocument{%
  \ShellEscape{%
    latexmk -cd
            -gg
            -jobname="\CheckWhetherJobNameHasAfourpaperphrase
                        {\expandafter\keepBeforeAfourpaperphrase\jobname\relax}%
                        {\jobname}%
                      \letterpaperphrase" 
            -pdflatex="lualatex \@percentchar O \@percentchar S" 
            -pdf -dvi- -ps- 
            \myinfile
  }%
}%
\AtBeginDocument{%
  \begingroup
  \immediate\write\@mainaux{\string\global\string\let\string\createletterdocument=\string\empty}%
  \endgroup
  \CheckWhetherJobNameHasLetterpaperphrase{}{\createletterdocument}%
}%
\makeatother

% some preamble stuff before `documentclass` line
% blah blah (preamble)
% more blah blah (preamble)

\documentclass[11pt,sans]{moderncv}  % <----- paper size is _not_ 
% set here but is set via \PassOptionsToClass.

\makeatletter
\@ifundefined{pdfpagewidth}{}{\pdfpagewidth=\paperwidth}%
\@ifundefined{pdfpageheight}{}{\pdfpageheight=\paperheight}%
\@ifundefined{pagewidth}{}{\pagewidth=\paperwidth}%
\@ifundefined{pageheight}{}{\pageheight=\paperheight}%
\makeatother

% a lot more preamble lines after `documentclass` line
\moderncvstyle{classic}
\usepackage{graphicx}

\firstname{John}
\familyname{Doe}

\address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061} 
\phone[mobile]{123 456 7890}
\email{[email protected]}
\photo[64pt][0.5pt]{example-image-a}


\begin{document}
   \makecvtitle
\end{document}

verwandte Informationen