定义不启动新组的环境

定义不启动新组的环境

在以下 MWE 中

\documentclass{article}
\usepackage{amsmath, environ}

\NewEnviron{hidden}{}
\def\hide#1{}

\begin{document}
\begin{align*}
  X &= Y \\
  % \begin{hidden}  % DOES NOT WORK
    &=Y_{1}%
  \\ &\leq Y_{2}\\%
  % \end{hidden}
  \hide{&=Y_{3}\\&=Y_{4}}
    &\le Z
\end{align*}
\begin{hidden}
  Some more tests
\end{hidden}
\end{document}

我定义了一个命令和一个环境来隐藏文档的某个部分(这是一个简化,我的用例有点复杂)。该命令适用于所有情况,包括环境align。但是,我的新环境在内部或类似命令中不起作用align。这可能是因为\begin{hidden} \end{hidden}打开和关闭一个组aligned会产生问题。有没有办法创建一个不创建组的虚拟环境,就像命令似乎不创建组一样。

答案1

你确实想要添加一个组,这样当您跳过时&就不会结束对齐单元,从而结束您开始隐藏的组。

在此处输入图片描述

此版本不能处理嵌套环境,但可以在此处工作并显示基本方案。

\documentclass{article}
\usepackage{amsmath, environ}

\def\hidden{{\ifnum0=`}\fi
\xhidden}
\def\xhidden#1\end#2{\ifnum0=`{\fi}\end{hidden}}% probably ought to check that #2 is "hidden"


\def\hide#1{}

\begin{document}
\begin{align*}
  X &= Y \\
   \begin{hidden}  % DOES NOT WORK
    &=Y_{1}%
  \\ &\leq Y_{2}\\%
   \end{hidden}
  \hide{&=Y_{3}\\&=Y_{4}}
    &\le Z
\end{align*}
\begin{hidden}
  Some more tests
\end{hidden}
\end{document}

答案2

根据 David 的回答。这是我尝试让事情在嵌套环境中发挥作用。

\documentclass{article}
\usepackage{amsmath, etoolbox}

\def\hide#1{} % or \def\hide#1{#1} to not hide it.

% Essentially flips "\begin{hidden}#1\end{hidden}" to "\begin{hidden}\end{hidden} \hide{#1}"
\def\hidden{{\ifnum0=`}\fi\xhidden\argend}%
\def\xhidden#1\argend#2\end#3{%
\expandafter\ifstrequal\expandafter{#3}{hidden}%
{\ifnum0=`{\fi}\end{hidden}\hide{#1#2}}{\xhidden#1#2\end{#3}\argend}}

\begin{document}
\begin{align*}
  X &= Y \\
  \begin{hidden}
    &=Y_{1}%
    \\ &\leq Y_{2}\\%
    \begin{matrix}
      A & BC
    \end{matrix}\\
  \end{hidden}
  \hide{&=Y_{3}\\&=Y_{4}}
    &\le Z
\end{align*}
\begin{hidden}
  \begin{center}
    Hello
  \end{center}
  Some more tests
\end{hidden}
\end{document}

相关内容