Как автоматически создать несколько версий документа с разными размерами бумаги и отразить это в имени сгенерированного PDF-файла?

Как автоматически создать несколько версий документа с разными размерами бумаги и отразить это в имени сгенерированного PDF-файла?

Я использую этот 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}

Связанный контент