Fehler mit [griechisch] Babel und letzte Seite, \Frontmatter?

Fehler mit [griechisch] Babel und letzte Seite, \Frontmatter?

Ich habe ein großes Dokument, für das ich "vorkompilierte Header" generieren wollte (TikZs Externalisierung und Mylatex(Beachten Sie, dass \jobname derselbe sein sollte)) und dachte, ich würde mylatexformatdafür verwenden (ultraschnelles PDFLatex mit Vorkompilierung). Das endete mit einem Fehlschlag. Beim Versuch, ein MWE zum Posten abzuleiten, bin ich wohl auf ein präziseres Problem gestoßen.

Die Struktur sieht ungefähr so ​​aus:

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}

Wenn ich dies mit kompiliere pdflatex test.tex, läuft die Kompilierung einwandfrei.

Ich "kompiliere" die test.fmtDatei folgendermaßen:

$ 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.

Dann erstelle ich die .pdfDatei mithilfe der vorkompilierten .fmtDatei wie folgt (ich füge den Kommentar nicht %&testals erste Zeile der test.texDatei ein, sondern gebe ihn in der Befehlszeile an):

$ 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.

Daher funktioniert das MWE im Ist-Zustand mit der „vorkompilierten“ .fmtDatei.

Wenn Sie jetzt das auskommentieren \usepackage[english]{babel}und die \usepackage[greek,english]{babel}Zeile in setup/_preamble.tex: auskommentieren, kann die .fmtDatei erfolgreich erstellt werden, ABER das Erstellen schlägt .pdfmit folgendem Fehler fehl:

$ 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}

? 

... und das Versagen \lipsumist, schätze ich, nur das Symptom eines anderen Problems.

Der Build ist jedoch .pdferfolgreich, wenn es vorkompiliert ist .fmtund [greek,]{babel}entweder \usepackage{lastpage}(in _preamble.tex) kommentiert ist ODER wenn \frontmatter(in test.tex) kommentiert ist?

Und danach habe ich festgestellt, dass der Build auch ohne Verwendung einer vorkompilierten Datei (also nur mit ) .pdffehlschlägt – obwohl ich in meinem Originaldokument nie einen solchen Fehler erhalten habe, bevor ich angefangen habe, mit Dateien herumzuspielen?! (Obwohl ich anmerken sollte, dass der Fehler, den ich in meinem Originaldokument erhalte, nicht als Fehler mit ausgedrückt wird , die Fehlermeldung ist anders).fmtpdflatex test.tex.fmt\lipsum

Was mache ich falsch – und wie kann ich diesen Paketsatz mit einer vorkompilierten .fmtDatei fehlerfrei erstellen?

(PS: kann zusammenhängen mitMöglicher Fehler in Babel-Greek, TexLive 2014- da es dort auch ein Problem mit einer .fmtDatei war, aber ich bin nicht sicher).

Antwort1

Ok, es stellt sich heraus, dass dies genau das gleiche Problem ist, das durch die Antwort von @egreg gelöst wurde inFehler bei der Verwendung von Greek babel, mparhack und \pagenumbering{roman}. Auch hier [greek,]{babel}wird neu definiert \thepage, um das Nichterweiterbare zu verwenden \textlatin– das Problem tritt hier jedoch auf, weil über die Funktion/das Makro in die Datei {lastpage}geschrieben werden soll .\thepage.aux\lastpage@putl@bel

Eine Lösung besteht darin, Folgendes hinzuzufügen 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

... und dann funktioniert scheinbar alles einwandfrei [greek,english]{babel}– auch beim Generieren und Verwenden der vorkompilierten .fmtDatei.

Also, letztendlich hatte das nicht viel damit zu tun mylatexformat(also muss ich immer noch nach einem MWE suchen, um das Problem zu demonstrieren, das ich immer noch habe :))

Übrigens habe ich dies gesehen, als ich das Paket wie folgt verwendet {trace}habe 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}

... und anschließendes Vergleichen der .logDateien (für [greek,english]{babel}„run“ vs. [english]{babel}„one“) in meld.

verwandte Informationen