저는 이 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 크기 모두에 적합한지 수동으로 확인했습니다. 나는 단지 향후 사소한 조정(각 직무 설명에 맞게 전체 이력서에서 하나 또는 두 개의 중요 항목 수정)을 위해 이 프로세스를 자동화하고 싶습니다. 내가 지원하는 직업/산업 유형별로 서로 다른 두 가지 버전을 수동으로 제작하는 것은 지루할 것입니다.
답변1
내 시스템에서 다음 예제를 다음과 같이 저장합니다.test.tex그리고 쉘에서 ( chdir
또는 cd
무엇이든을 통해) 활성 디렉토리를 디렉토리로 변경하십시오.test.tex저장한 후 컴파일test.tex전화로라텍스셸/명령줄에서 다음을 통해
latexmk -cd -gg -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps- test.tex
(어쩌면 당신의 플랫폼에서 --enable-write18
대신에 필요할 수도 있습니다 --shell-escape
)
, 그 다음 첫 번째 동안루아텍스-실행 시작자라텍스, 처음에는 aux 파일이 존재하지 않는 경우, 다른라텍스-run은 의 현재 확장에 -jobname
문구를 첨부하기 위해 -옵션이 사용되는 곳에서 시작됩니다 .-letterpaper
\jobname
\jobname
어떤 경우든 -primitive의 확장에 구문이 포함되어 있는지 확인됩니다 -letterpaper
.
그렇다면 "letterpaper" 옵션이 documentclass에 전달됩니다.
그렇지 않은 경우 "a4paper" 옵션이 documentclass에 전달됩니다.
결과적으로 당신은 하나를 얻었습니다라텍스-계속되다test.tex정확히 한 번 다른 것을 시작하는라텍스-계속되다test.tex와 함께 -jobname="test-letterpaper"
.
결국 당신은 얻습니다테스트.pdf그건 a4paper이고시험편지.pdf그건 편지지야.
원한다면 -jobname
쉘/명령줄에 -옵션을 제공할 수도 있습니다. 예를 들어 다음과 같이 하십시오.
latexmk -cd -gg -jobname="test-a4paper" -pdflatex="lualatex --shell-escape %O %S" -pdf -dvi- -ps- test.tex
(어쩌면 당신의 플랫폼에서 --enable-write18
대신에 필요할 수도 있습니다 --shell-escape
)
얻기 위해test-a4paper.pdf그리고시험편지.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}