Я использую этот moderncv
курс для подготовки своего резюме для подачи на вакансии в США (где стандартный размер бумаги letter
) и в Великобритании (где стандартный размер бумаги A4
).
Вот MWE
файл под названием 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}
Как показано на рисунке MWE
, некоторые из моих пользовательских преамбул предшествуют documentclass
строке, а некоторые — следуют за ней.
Я использую latexmk
для компиляции документа с lualatex
. Как я могу поддерживать толькоодинокий tex
источник и автоматически создает две разные версии PDF-документа каждыйсоответствующим образом названный Resume_A4paper.pdf
и Resume_letterpaper.pdf
? Я с радостью воспользуюсь любой directlua
магией и/или внешними инструментами для содействия этому.
Обоснование
С текущим содержанием я вручную проверил, что макет страницы подходит для обоих размеров A4/Letter. Я просто хочу автоматизировать этот процесс для будущих небольших правок (изменение одного или двух пунктов в целом CV для адаптации к каждому описанию работы). Было бы утомительно вручную создавать 2 разные версии для каждого типа работы/отрасли, на которую я претендую.
решение1
Когда я сохраняю в своей системе следующий пример кактест.текси в оболочке (через chdir
или cd
или как-то еще) измените активный каталог на каталог, гдетест.текссохраняется, а затем компилируетсятест.текспозвонив по телефонулатексмкиз оболочки/командной строки через
latexmk -cd -gg -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps-test.tex
(возможно на вашей платформе вам нужно --enable-write18
вместо --shell-escape
)
, то в течение первоголуалатекс-запуск инициированлатексмк, где aux-файлы не существуют в начале, другойлатексмк-run инициируется там, где -jobname
-option используется для присоединения фразы -letterpaper
к текущему расширению \jobname
.
В любом случае проверяется, \jobname
содержит ли расширение -примитива фразу -letterpaper
.
Если это так, то параметр «letterpaper» передается в класс документа.
Если это не так, то классу документа передается параметр «a4paper».
В результате у вас есть одинлатексмк-запускать натест.текскоторый ровно один раз инициирует другойлатексмк-запускать натест.тексс -jobname="test-letterpaper"
.
В итоге вы получаететест.pdfкоторый является бумагой формата а4 иtest-letterpaper.pdfкоторая является почтовой бумагой.
Если вы хотите, вы -jobname
также можете указать опцию - в оболочке/командной строке и, например, выполнить
latexmk -cd -gg -jobname="test-a4paper" -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps-test.tex
(возможно на вашей платформе вам нужно --enable-write18
вместо --shell-escape
)
чтобы получитьтест-a4paper.pdfиtest-letterpaper.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}