![[希臘文] babel 和lastpage 失敗,\frontmatter?](https://rvso.com/image/305904/%5B%E5%B8%8C%E8%87%98%E6%96%87%5D%20babel%20%E5%92%8Clastpage%20%E5%A4%B1%E6%95%97%EF%BC%8C%5Cfrontmatter%EF%BC%9F.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}
想要透過其 function/macro寫入\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}
一點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