保存环境以供重新定义

保存环境以供重新定义

我想编写一个开关,将我的文档置于“横向模式”。如果处于活动状态,我想重新定义环境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}

相关内容