我想编写一个开关,将我的文档置于“横向模式”。如果处于活动状态,我想重新定义环境multicols
以不执行任何操作,但我也不想永远失去它,因为我想将整个文档置于“持久”多列环境中。
\documentclass{article}
\usepackage[a5paper, landscape, left=1cm, right=1cm, top=2cm, bottom=2cm]{geometry}
\usepackage{xparse}
\usepackage{lipsum}
\usepackage{multicol}
\let\persistentMulticols\multicols
\let\endpersistentMulticols\endmulticols
% let multicols do nothing
\RenewDocumentEnvironment{multicols}{ m }{}{}
\begin{document}
\begin{persistentMulticols}{2}
\lipsum[66]
\begin{multicols}{2}
\lipsum[67]
\end{multicols}
\lipsum[1-2]
\end{persistentMulticols}
\end{document}
答案1
(原始)\endmulticols
包含\@checkend{multicols}
,这是导致问题的原因。您需要修补\endpersistentMulticols
以便它使用新名称。
\documentclass{article}
\usepackage[a5paper, landscape, left=1cm, right=1cm, top=2cm, bottom=2cm]{geometry}
\usepackage{xparse}
\usepackage{lipsum}
\usepackage{multicol,xpatch}
\let\persistentMulticols\multicols
\let\endpersistentMulticols\endmulticols
\makeatletter
\xpatchcmd{\endpersistentMulticols}
{\@checkend{multicols}}
{\@checkend{persistentMulticols}}
{}{}
\makeatother
% let multicols do nothing
\renewenvironment{multicols}[2][]{\ignorespaces}{\ignorespacesafterend}
\begin{document}
\begin{persistentMulticols}{2}
\lipsum[66]
\begin{multicols}{2}
\lipsum[67]
\end{multicols}
\lipsum[1-2]
\end{persistentMulticols}
\end{document}