我正在编写一个可以加载的包babel
,用户可以在 或 下运行pdflatex
。加载lualatex
babel 的选项后,“:”将处于活动状态;并将以下内容写入文件:french
pdflatex
.aux
\catcode `:\active
对于 来说,这一切都很好pdflatex
。但是,如果用户(出于某种原因)决定开始使用 运行lualatex
,则会读取现有.aux
文件,并且当文件的后续行包含“:”时会报告错误.aux
。例如,
\newlabel{eqn:1}{{1}{1}}
结果是
Undefined control sequence.
<argument> r@eqn:
1
人们可以将.aux
文件删除并重新开始,但我想完全阻止该消息出现。
有没有办法告诉lualatex
如何处理这个活动字符(比如,将其读为“:”)?
我想到过这样的结构
\RequirePackage{iftex}
\iflualatex
\RequirePackage{etoolbox}
\AtEndPreamble{\catcode`:<someaction>}
\fi
但我不知道是什么一些行动必定是...
这个 MWE 在单个文档中说明了这个问题:
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[french]{babel}
\begin{document}
Some English. \foreignlanguage{french}{Cette théorie formera désormais une des branches les plus importantes de la physique générale}. More English.
\begin{equation}\label{eqn:1}
f(x) = Ax
\end{equation}
\end{document}
答案1
如果您不使用 luatex,您可以向 aux 文件中写入一行,这样如果您使用 luatex,该文件就不会被读取。
\documentclass{article}
\makeatletter
\ifx\directlua\undefined
\AtBeginDocument{\immediate\write\@auxout{\detokenize{%
\ifx\directlua\undefined\else\endinput\fi}}}
\fi
\makeatother
\usepackage[french]{babel}
\begin{document}
Some English. \foreignlanguage{french}{Cette théorie formera désormais une des branches les plus importantes de la physique générale}. More English.
\begin{equation}\label{eqn:1}
f(x) = Ax
\end{equation}
\end{document}
因此使用 pdflatex 并且 aux 文件将包含以下行
\ifx \directlua \undefined \else \endinput \fi
当您使用 pdftex 时它不执行任何操作,但当您第一次使用 luatex 时将停止读取文件。