[그리스어] 바벨과 마지막 페이지, \frontmatter의 실패?

[그리스어] 바벨과 마지막 페이지, \frontmatter의 실패?

"미리 컴파일된 헤더"(TikZ의 외부화 및 mylatex(참고, \jobname은 동일해야 합니다.)) 그리고 그것을 위해 사용할 것이라고 생각했습니다 mylatexformat(사전 컴파일 기능을 갖춘 초고속 pdflatex). 그것은 실패로 끝났고, 게시할 MWE를 도출하려고 하다가 좀 더 정확한 문제를 발견한 것 같습니다.

구조는 다음과 같습니다.

setup/_preamble.tex

\documentclass[10pt]{book}

\usepackage{cmap}% (causes pdflatex: dangling objects discarded, no output file produced. with -ini/mylatexformat)
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel} % ok
% \usepackage[greek,english]{babel} % BAD with lastpage (+\frontmatter)!!!!
\usepackage{amsmath,amssymb}
\usepackage{csquotes}
\usepackage[backend=biber]{biblatex}
\usepackage{tikz}
\usepackage{siunitx}

\usepackage{lastpage}

test.tex

%% This is the file `test.tex'

\input{setup/_preamble.tex}

\csname endofdump\endcsname%

\usepackage{lipsum}

\begin{document}
\frontmatter
\clearpage

\section{Something}
\lipsum[1-5]

\end{document}

이것을 로 컴파일하면 pdflatex test.tex잘 컴파일됩니다.

다음과 같이 파일을 "컴파일"합니다 test.fmt.

$ pdflatex -ini -jobname="test" "&pdflatex" mylatexformat.ltx "test.tex"
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (INITEX)
...
Beginning to dump on file test.fmt
 (preloaded format=test 2015.2.18)
31400 strings of total length 611843
661162 memory locations dumped; current usage is 654&652915
28229 multiletter control sequences
\font\nullfont=nullfont
\font\OMX/cmex/m/n/10=cmex10
...
20 words of pdfTeX memory
8 indirect objects
No pages of output.

pdfTeX warning: pdflatex: dangling objects discarded, no output file produced.
Transcript written on test.log.

.pdf그런 다음 다음과 같이 미리 컴파일된 파일을 사용하여 파일을 빌드합니다 (파일 의 첫 번째 줄에 주석을 .fmt포함하지 않고 대신 명령줄에서 지정합니다).%&testtest.tex

$ pdflatex --file-line-error --synctex=1 "&test" test.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
 restricted \write18 enabled.
...
==============================================================================
JOB NAME         : "test"
CUSTOMISED FORMAT: "test"
PRELOADED FILES:
setup/_preamble.tex
    book.cls    2014/09/29 v1.4h Standard LaTeX document class
...
==============================================================================
(mylatexformat)Info: start reading document "test"
(mylatexformat)      on input line 6. (\endofdump)
==============================================================================
(/media/disk/texlive/2014/texmf-dist/tex/latex/lipsum/lipsum.sty)
...
Output written on test.pdf (1 page, 41826 bytes).
SyncTeX written on test.synctex.gz.
Transcript written on test.log.

따라서 MWE는 있는 그대로 "미리 컴파일된" .fmt파일과 함께 작동합니다.

이제 에 주석을 달고 다음 줄의 \usepackage[english]{babel}주석 처리를 제거 하면 파일 이 성공적으로 빌드될 수 있지만 다음과 같은 경우 빌드가 실패합니다.\usepackage[greek,english]{babel}setup/_preamble.tex.fmt.pdf

$ pdflatex --file-line-error --synctex=1 "&test" test.tex
...
==============================================================================
JOB NAME         : "test"
CUSTOMISED FORMAT: "test"
PRELOADED FILES:
setup/_preamble.tex
...
==============================================================================
(mylatexformat)Info: start reading document "test"
(mylatexformat)      on input line 6. (\endofdump)
==============================================================================
(/media/disk/texlive/2014/texmf-dist/tex/latex/lipsum/lipsum.sty)
...
(/media/disk/texlive/2014/texmf-dist/tex/latex/siunitx/siunitx-abbreviati
ons.cfg)<<ot1.cmap>><<ot1tt.cmap>><<t1.cmap>> 
AED: lastpage setting LastPage
[1{/media/disk/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}
]
./test.tex:16: Use of \\@lipsum doesn't match its definition.
\text@command #1->\def \reserved@a {
                                    #1}\ifx \reserved@a \@empty \let \check@...
l.16 \end{document}

? 

... 그리고 의 실패는 \lipsum아마도 다른 문제의 증상일 뿐이라고 생각합니다.

그러나 미리 컴파일된 경우 빌드가 성공 하고 (in )이 주석 처리 되면 .pdf성공합니다 . 또는 (in )에 주석이 달린 경우?.fmt[greek,]{babel}\usepackage{lastpage}_preamble.tex\frontmattertest.tex

그 후, 미리 .pdf컴파일된 파일을 사용하지 않고도 .fmt(예: 를 사용하여 pdflatex test.tex) 빌드가 실패한다는 사실을 발견했습니다. 원본 문서에 있더라도 파일을 엉망으로 만들기 전에는 이와 같은 오류가 발생하지 않았습니다 .fmt.?! (물론 원본 문서에서 발생한 오류는 의 오류로 표현되지 않으며 \lipsum오류 메시지가 다릅니다.)

.fmt내가 뭘 잘못하고 있는 걸까요? 이 패키지 세트를 오류 없이 미리 컴파일된 파일로 빌드하려면 어떻게 해야 합니까 ?

(PS: 다음과 관련이 있을 수 있습니다.babel-greek, TexLive 2014에서 가능한 버그- 거기에 있는 파일에도 문제가 있었지만 .fmt확실하지는 않습니다.)

답변1

좋아, 이것은 @egreg의 답변으로 해결된 것과 똑같은 문제라는 것이 밝혀졌습니다.그리스어 babel, mparhack 및 \pagenumbering{roman}을 사용할 때 오류가 발생했습니다.. 여기서도 확장 불가능을 사용하도록 [greek,]{babel}재정의합니다 . 그러나 함수/매크로를 통해 파일 에 쓰기를 원하기 때문에 여기서 문제가 발생합니다 .\thepage\textlatin{lastpage}\thepage.aux\lastpage@putl@bel

따라서 한 가지 해결책은 이것을 다음에 추가하는 것입니다 setup/_preamble.tex.

\usepackage{lastpage}
\makeatletter
\let\oldlastpage@putl@bel\lastpage@putl@bel
\renewcommand*\lastpage@putl@bel{%
  \bgroup
  \let\textlatin\@firstofone % make \textlatin a no-op
  \oldlastpage@putl@bel%
  \egroup
}
\makeatother

... 그리고 겉보기에는 미리 [greek,english]{babel}컴파일된 파일을 생성하고 사용할 때에도 모든 것이 잘 작동합니다 .fmt.

따라서 결국 이것은 그다지 관련이 없었습니다 mylatexformat(그래서 여전히 제가 가지고 있는 문제를 입증하기 위해 MWE를 찾아야 합니다 :)).

{trace}Btw, 나는 다음과 같이 패키지를 사용하여 이것을 보았습니다 test.tex.

\input{setup/_preamble.tex}

\csname endofdump\endcsname%

\usepackage{lipsum}
\usepackage{trace}

\begin{document}
\frontmatter
\clearpage

\section{Something}
\lipsum[1-5]

\traceon % trace only the \end{document} part
\end{document}

... .log그런 [greek,english]{babel}다음 .[english]{babel}meld

관련 정보