¿Cómo crear automáticamente múltiples versiones de un documento con diferentes tamaños de papel y reflejar esto en el nombre del archivo PDF generado?

¿Cómo crear automáticamente múltiples versiones de un documento con diferentes tamaños de papel y reflejar esto en el nombre del archivo PDF generado?

Estoy usando la moderncvclase para preparar mi currículum para postularme a trabajos en los EE. UU. (donde el tamaño de papel estándar es letter) y en el Reino Unido (donde el tamaño de papel estándar es A4).

Aquí hay un MWEarchivo llamado 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}

Como se muestra en MWE, algunos de mis preámbulos personalizados preceden a la documentclasslínea, mientras que otros vienen después.

Estoy usando latexmkpara compilar el documento con lualatex. ¿Cómo puedo mantener solo unsoltero texfuente y crear automáticamente dos versiones diferentes del documento PDF cada unaapropiadamente nombrado Resume_A4paper.pdfy Resume_letterpaper.pdf? Estaré feliz de utilizar cualquier directluaherramienta mágica y/o externa para facilitar esto.

Razón fundamental

Con el contenido actual, he verificado manualmente que el diseño de la página sea correcto para ambos tamaños A4 y carta. Solo quiero automatizar este proceso para futuros ajustes menores (modificar uno o dos puntos en todo el CV para adaptarlo a cada descripción de trabajo). Sería tedioso producir manualmente 2 versiones diferentes para cada tipo de trabajo/industria que estoy solicitando.

Respuesta1

Cuando estoy en mi sistema guardo el siguiente ejemplo comoprueba.texy en el shell (a través de chdiro cdo lo que sea) cambie el directorio activo al directorio dondeprueba.texse almacena y luego se compilaprueba.texllamandolátexdesde el shell/línea de comando a través de

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

(tal vez en tu plataforma necesites --enable-write18en lugar de --shell-escape)

, luego durante la primeralualatex-ejecución iniciada porlátex, donde los archivos auxiliares no existen al principio, otrolátex-run se inicia donde -jobnamese usa la opción -para adjuntar la frase -letterpapera la expansión actual de \jobname.

En cualquier caso se comprueba si la expansión de la \jobname-primitiva contiene la frase -letterpaper.

Si es así, la opción "papel de carta" se pasa a la clase de documento.

Si no es así, se pasa la opción "a4paper" a la clase de documento.

Como resultado tienes unolátex-ejecutarse enprueba.texque exactamente una vez inicia otrolátex-ejecutarse enprueba.texcon -jobname="test-letterpaper".

Al final obtienesprueba.pdfque es papel a4 yprueba-papel-carta.pdfque es papel de carta.

Si lo desea, también puede proporcionar la -jobnameopción -en el shell/línea de comando y, por ejemplo, hacer

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

(tal vez en tu plataforma necesites --enable-write18en lugar de --shell-escape)

para obtenerprueba-a4paper.pdfyprueba-papel-carta.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}

información relacionada