Estoy usando la moderncv
clase 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 MWE
archivo 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 documentclass
línea, mientras que otros vienen después.
Estoy usando latexmk
para compilar el documento con lualatex
. ¿Cómo puedo mantener solo unsoltero tex
fuente y crear automáticamente dos versiones diferentes del documento PDF cada unaapropiadamente nombrado Resume_A4paper.pdf
y Resume_letterpaper.pdf
? Estaré feliz de utilizar cualquier directlua
herramienta 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 chdir
o cd
o 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-write18
en 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 -jobname
se usa la opción -para adjuntar la frase -letterpaper
a 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 -jobname
opció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-write18
en 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}