假设我们有一个巨大的 LaTeX 文档,我们通过latex
+生成 PostScript 版本dvips
,通过 生成 PDF 版本lualatex
。从头开始编译所有内容(没有以前运行的任何辅助文件)需要很长时间(在我当前的机器上,当前的后台负载需要超过 1.5 小时)。因此,每当我们希望生成两个版本时,我们都希望节省一些工作并尽可能多地在辅助文件中保留有用的东西(我们在重用旧辅助文件时只花费 68% 到 78% 的时间)。但是,当我们运行时,我们在标准输出上收到错误lualatex
后 latex
(我们在这个特定问题中假设这个顺序正是如此)如下。
为了在一个小例子中演示错误,我们准备了一个mwe.tex
包含
\documentclass{article}
\usepackage[french,USenglish]{babel}
\begin{document}
\section{Title}\label{sect:title}% even “sect:” would do
\end{document}
运行rm -f mwe.aux && latex mwe && lualatex mwe
结果
(./mwe.aux
! Undefined control sequence.
<argument> r@sect:
title
l.10 \newlabel{sect:title}{{1}{1}}
?
在标准 tty 输出上。是否有错误/问题/意外行为隐藏在任何地方(例如,在babel
)?如何在运行之后和运行之前进行处理mwe.aux
(同时保留尽可能多的有用数据)以消除错误?我们希望以非交互方式编辑辅助文件,例如通过或。latex
lualatex
sed
awk
答案1
在标签中使用:
法语标点符号的同时激活它们是在玩火,但您可以向辅助设备写入命令以确保安全。
\documentclass{article}
\usepackage[french,USenglish]{babel}
\ifdefined\directlua\else
\makeatletter
\AtBeginDocument{%
\immediate\write\@auxout{\detokenize{%
\ifx:\@undefined\edef:{\string:}\fi
}}}
\makeatother
\fi
\begin{document}
\section{Title}\label{sect:title}% even “sect:” would do
\end{document}
乳胶运行后,辅助设备将
\relax
\providecommand\babel@aux[2]{}
\@nameuse{bbl@beforestart}
\catcode `:\active
\catcode `;\active
\catcode `!\active
\catcode `?\active
\ifx :\@undefined \edef :{\string :}\fi
\babel@aux{USenglish}{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Title}{1}{}\protected@file@percent }
\newlabel{sect:title}{{1}{1}}
\gdef \@abspage@last{1}
然后在 lualatex
\relax
\providecommand\babel@aux[2]{}
\@nameuse{bbl@beforestart}
\babel@aux{USenglish}{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Title}{1}{}\protected@file@percent }
\newlabel{sect:title}{{1}{1}}
\gdef \@abspage@last{1}
lualatex;pdftops 生成的postscript不能用吗?