修补文档环境的独立重新定义以便自动添加一些额外的代码?

修补文档环境的独立重新定义以便自动添加一些额外的代码?

编辑。我重写了我的问题,因为我过度简化了我的实际问题并且例子没有反映它。

在以下 MWE 中,

  • 自定义类myclass.cls

    1. 定义一个自定义\maketitle宏 ( \mymaketitle),multicols在通常的\maketitle
    2. multicols在文档末尾自动结束环境,
  • (完整)子文件(sub\jobname.tex)使用自定义类和自定义的\mymaketitle

  • 一个主文件具有与子文件相同的内容。

  • 与第一个主文件相比,第二个文件输入了子文件而不是具有相同的内容:虽然子文件是完整的,但由于自定义类加载了包,所以这应该不是问题standalone

第一个主文件和子文件都可以顺利编译,但第二主文件的编译失败并出现错误:

! LaTeX Error: \begin{multicols} on input line 5 ended by \end{document}.

除非是什么使得子文件可以自行编译:

  \documentclass{myclass}
  \begin{document}
  ...
  \end{document}

已移除。

%%%%%%%%%%%%%%%%%%%%%
% Class file
%%%%%%%%%%%%%%%%%%%%%
\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{standalone}
\RequirePackage{multicol}
%
\LoadClass{article}
%
\newcommand{\mymaketitle}{%
  \maketitle
  \begin{multicols}{2}
}
%
\AtEndDocument{\end{multicols}}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%
% Sub file
%%%%%%%%%%%%%%%%%%%%%
\begin{filecontents*}{sub\jobname.tex}
  \documentclass{myclass}
  \begin{document}
  \title{Foo Bar}
  \author{Bar Foo}
  \mymaketitle
  Foo bar bar foo.
  \end{document}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%
% Main file 1
%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
%
\begin{document}
\title{Foo Bar}
\author{Bar Foo}
\mymaketitle
Foo bar bar foo.
\end{document}
%%%%%%%%%%%%%%%%%%%%%
% Main file 2
%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
%
\begin{document}
\input{sub\jobname}
\end{document}

我猜测第二个主文件编译失败是因为document该包将环境重新定义standalone为简单的 TeX 组,因此:

\AtEndDocument{\end{multicols}}

来自自定义类的现在被忽略了。

因此我的问题是:是否可以修补环境standalone的重新定义document以便自动添加一些额外的代码(这里\end{multicols})?

答案1

看起来独立版包含合适的代码。尝试一下\RequirePackage[group=false]{standalone}

相关内容