다양한 용지 크기로 여러 버전의 문서를 자동으로 생성하고 이를 생성된 PDF 파일 이름에 반영하는 방법은 무엇입니까?

다양한 용지 크기로 여러 버전의 문서를 자동으로 생성하고 이를 생성된 PDF 파일 이름에 반영하는 방법은 무엇입니까?

저는 이 moderncv수업을 통해 미국(표준 용지 크기가 letter)과 영국(표준 용지 크기가 A4) 취업 지원을 위한 이력서를 준비하고 있습니다.

여기 MWEmain.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}

관련 정보