独立错误地声称子文件的子前言已更改

独立错误地声称子文件的子前言已更改

(可能与这个问题

pdflatex以下 MCE 的每个编译:

\begin{filecontents}[overwrite]{subfile.tex}
\documentclass{article}
\newcommand\mycolon{:}
\begin{document}
Foo.
\end{document}
\end{filecontents}

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[subpreambles]{standalone}
\usepackage{babel}
\begin{document}
\input{subfile.tex}
\end{document}

导致:

独立软件包警告:文件“subfile.tex”的子序言已更改。内容将被忽略。请在输入行 7 重新运行 LaTeX!

但文件 'subfile.tex' 的子序言显然没有改变。这个问题可能与以下原因有关:

  • \newcommand\mycolon{:}子文件的前言中,如果将其移动到文档主体中,则不会再发出警告,
  • 使用babel-french,因为如果主文件中的选项被删除,则不再发出警告;这可能与文档开头的冒号 ( ) 激活french有关。:babel-french

即使我可以通过移动\newcommand\mycolon{:}到文档主体来解决这个问题,您是否了解发生了什么以及如何使整个工作与两者一起工作:

  • \newcommand\mycolon{:}在序言中,
  • babel-french正在行动?

答案1

解释很简单: 的定义\mycolon发生了变化。在 subfile.tex 中,它扩展为字符:( catcode 12),而在主文件中,它扩展为命令:( catcode 13)。

使用 LuaLaTeX 或 XeLaTeX 进行编译时不会发生此 catcode 更改(当然\usepackage[T1]{fontenc}必须删除)。使用这些格式,您的文件可以按预期进行编译。

相关内容