我正在使用appendix
包的appendices
环境,由于附录的样式发生变化,在附录后放置任何内容都没有意义。如果在环境后放置任何内容appendices
(或阻止其他内容),我想引发错误。也许通过在 中执行某些etoolbox
操作\AfterEndEnvironment{appendices}{...}
?
我可以重新定义\section
以给出错误,但我想知道是否还有更全面的内容。评论提到模拟序言中的内容如何引发错误,该怎么做?
答案1
如果在 之前进行排版, LaTeX 使用内部宏\@nodocument
来引发错误\begin{document}
。它包含在其他一些宏中,以及 中\everypar
,但在 begin-document 中,它被删除\everypar
并重新定义为不执行任何操作。您想在附录结束时将其反转。
% in a .sty or after \makeatletter
% LaTeX defines:
%\gdef\@nodocument{%
% \@latex@error{Missing \protect\begin{document}}\@ehd}
% similarly:
\gdef\@afterappendix{%
\@latex@error{Text found after the appendices}\@ehd}
\g@addto@macro\endappendices{\global\let\@nodocument\@afterappendix
\global\everypar{\@afterappendix}}
% or use \AfterEndEnvironment
似乎\end{appendices}
没有结束正在进行的段落,因此可以与添加错误消息一起进行修补。错误帮助文本可以更具体,但通用的文本也\@ehd
不错。强制结束文档可以在错误消息之后完成,并且需要更具体的错误帮助文本。
使用这些附加内容,并假设这是由文档类 xxxxxx 定义的
\gdef\@afterappendix{%
\global\let\@afterappendix\relax
\ClassError{xxxxxx}{Text found after the appendices}%
{Placing anything after the appendices doesn't make sense,\MessageBreak
so the document will be forcibly ended here.}\enddocument}
\g@addto@macro\endappendices{\par
\global\let\@nodocument\@afterappendix
\global\everypar{\@afterappendix}}