¿Fracaso con babel [griego] y lastpage, \frontmatter?

¿Fracaso con babel [griego] y lastpage, \frontmatter?

Tengo un documento grande para el cual quería generar "encabezados precompilados" (Exteriorización de TikZ y mylatex(nota, \jobname debería ser el mismo)) y pensé en usarlo mylatexformat(pdflatex ultrarrápido con precompilación). Eso terminó en fracaso, así que al intentar derivar un MWE para publicar, creo que me topé con un problema más preciso.

La estructura se parece a esto:

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}

Si compilo esto con pdflatex test.tex, se compila bien.

"Compilo" el test.fmtarchivo así:

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

Luego construyo el .pdfarchivo usando el archivo precompilado .fmtde esta manera (no incluyo el %&testcomentario como la primera línea del test.texarchivo, sino que lo especifico en la línea de comando):

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

Entonces, el MWE tal como está funciona con el .fmtarchivo "precompilado".

Ahora, si comenta \usepackage[english]{babel}y descomenta la \usepackage[greek,english]{babel}línea en setup/_preamble.tex: el .fmtarchivo se puede compilar correctamente, PERO la compilación .pdffalla con:

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

? 

... y el fallo de \lipsumes, supongo, sólo un síntoma de algún otro problema.

Sin embargo, la .pdfcompilación se realizará correctamente con la versión precompilada .fmty [greek,]{babel}si se comenta \usepackage{lastpage}(in _preamble.tex); ¿O si se comenta \frontmatter(en )?test.tex

Y después de esto, descubrí que la .pdfcompilación fallará incluso sin usar .fmtun archivo precompilado (es decir, solo con pdflatex test.tex), incluso si en mi documento original, nunca recibí un error como este, antes de comenzar a alterar los .fmtarchivos. (Aunque debo tener en cuenta que el error que recibo en mi documento original no se expresa como un error con \lipsum, el mensaje de error es diferente)

¿Qué estoy haciendo mal y cómo puedo hacer que este conjunto de paquetes se cree con un .fmtarchivo precompilado sin errores?

(PD: puede estar relacionado conPosible error en babel-greek, TexLive 2014(ya que también hubo un problema con un .fmtarchivo allí, pero no estoy seguro).

Respuesta1

Ok, resulta que este es exactamente el mismo problema resuelto por la respuesta de @egreg enError al utilizar el griego babel, mparhack y \pagenumbering{roman}. Aquí también [greek,]{babel}se redefine \thepageel uso de no expandible \textlatin, pero el problema aquí ocurre porque {lastpage}quiere escribir \thepageen el .auxarchivo, a través de su función/macro \lastpage@putl@bel.

Entonces una solución es agregar esto a 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

... y luego, aparentemente, todo funciona bien [greek,english]{babel}, incluso cuando se genera y usa el .fmtarchivo precompilado.

Entonces, después de todo, esto no tuvo mucho que ver mylatexformatcomo tal (por lo que aún tendré que buscar un MWE para demostrar el problema que todavía tengo :))

Por cierto, vi esto usando el paquete {trace}así 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}

... y luego comparar los .logarchivos (para [greek,english]{babel}ejecutar versus [english]{babel}uno) en meld.

información relacionada