要求 LuaLaTeX 忽略先前由 pdflatex 写入辅助文件的活动 catcode

要求 LuaLaTeX 忽略先前由 pdflatex 写入辅助文件的活动 catcode

我正在编写一个可以加载的包babel,用户可以在 或 下运行pdflatex。加载lualatexbabel 的选项后,“:”将处于活动状态;并将以下内容写入文件:frenchpdflatex.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 时将停止读取文件。

相关内容