![Fehler mit [griechisch] Babel und letzte Seite, \Frontmatter?](https://rvso.com/image/305904/Fehler%20mit%20%5Bgriechisch%5D%20Babel%20und%20letzte%20Seite%2C%20%5CFrontmatter%3F.png)
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 mylatexformat
dafü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.fmt
Datei 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 .pdf
Datei mithilfe der vorkompilierten .fmt
Datei wie folgt (ich füge den Kommentar nicht %&test
als erste Zeile der test.tex
Datei 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“ .fmt
Datei.
Wenn Sie jetzt das auskommentieren \usepackage[english]{babel}
und die \usepackage[greek,english]{babel}
Zeile in setup/_preamble.tex
: auskommentieren, kann die .fmt
Datei erfolgreich erstellt werden, ABER das Erstellen schlägt .pdf
mit 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 \lipsum
ist, schätze ich, nur das Symptom eines anderen Problems.
Der Build ist jedoch .pdf
erfolgreich, wenn es vorkompiliert ist .fmt
und [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 ) .pdf
fehlschlä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).fmt
pdflatex test.tex
.fmt
\lipsum
Was mache ich falsch – und wie kann ich diesen Paketsatz mit einer vorkompilierten .fmt
Datei fehlerfrei erstellen?
(PS: kann zusammenhängen mitMöglicher Fehler in Babel-Greek, TexLive 2014- da es dort auch ein Problem mit einer .fmt
Datei 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 .fmt
Datei.
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 .log
Dateien (für [greek,english]{babel}
„run“ vs. [english]{babel}
„one“) in meld
.