Ich nutze den moderncv
Kurs, 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 MWE
Datei 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 documentclass
Zeile, während andere danach kommen.
Ich verwende latexmk
zum Kompilieren des Dokuments lualatex
. Wie kann ich nur eineinzel tex
Quelle und erstellen Sie automatisch zwei verschiedene Versionen des PDF-Dokumentspassend benannt Resume_A4paper.pdf
und ? Ich bin gerne bereit , Zauberei und/oder externe Hilfsmittel Resume_letterpaper.pdf
zu 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 chdir
oder cd
oder 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-write18
stattdessen --shell-escape
)
, dann während der erstenAbonnieren-run initiiert vonlatexmk, wo aux-Dateien am Anfang nicht existieren, ein weitereslatexmk-run wird eingeleitet, wobei die -jobname
Option - zum Anhängen der Phrase -letterpaper
an 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 -jobname
Option 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-write18
stattdessen --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}