[希臘文] babel 和lastpage 失敗,\frontmatter?

[希臘文] babel 和lastpage 失敗,\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文件來建立文件,如下所示(我不將%&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\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}想要透過其 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

相關內容