![[그리스어] 바벨과 마지막 페이지, \frontmatter의 실패?](https://rvso.com/image/305904/%5B%EA%B7%B8%EB%A6%AC%EC%8A%A4%EC%96%B4%5D%20%EB%B0%94%EB%B2%A8%EA%B3%BC%20%EB%A7%88%EC%A7%80%EB%A7%89%20%ED%8E%98%EC%9D%B4%EC%A7%80%2C%20%5Cfrontmatter%EC%9D%98%20%EC%8B%A4%ED%8C%A8%3F.png)
"미리 컴파일된 헤더"(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
포함하지 않고 대신 명령줄에서 지정합니다).%&test
test.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
\frontmatter
test.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