编辑。我重写了我的问题,因为我过度简化了我的实际问题并且例子没有反映它。
在以下 MWE 中,
自定义类
myclass.cls
:- 定义一个自定义
\maketitle
宏 (\mymaketitle
),multicols
在通常的\maketitle
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}
。