跨 LaTeX 环境的 Span 命令

跨 LaTeX 环境的 Span 命令

假设我有一个环境redacted,我想以这种方式声明:

\begin{redacted}
This is some secret content.
\end{redacted}

我希望结果相当于在环境内部传递文本minipage,然后\phantom{}

\begin{minipage}[1.0\textwidth]
\phantom{This is some secret content.}
\end{minipage}

以下声明给出错误,因为花括号不匹配

\newenvironment{redacted}
    {
        \begin{minipage}[1.0\textwidth]
        \phantom{
    }
    {
        }
        \end{minipage}
    }

有什么方法可以实现这一点吗?

答案1

我相信你想要这样的东西。请注意,我把放在里面minipage\phantom不是反过来,因为当在非数学模式下调用时,\phantom会以受限水平模式(LaTeX 术语中的 LR 模式)排版其参数,因此使用\phantom{\BODY}总是会得到一行(可能非常长)。

\BODY收集用 声明的环境的主体\NewEnviron。此宏来自非常方便的environ包。

\documentclass{article}
\usepackage{environ}
\usepackage{lipsum}

\NewEnviron{redacted}{%
  \par\noindent
  \phantom{%
    \begin{minipage}{\linewidth}
      \BODY
    \end{minipage}%
  }%
  \par
}

\begin{document}

Before.

\begin{redacted}
  \lipsum[1]
\end{redacted}

After.

\end{document}

截屏

答案2

与 frougon 的答案类似,另一种选择是使用xparse带有参数类型的包b,它首先扫描环境主体,以便它可以用作环境定义中的普通参数:

\documentclass{article}
\usepackage{xparse}
\usepackage{lipsum}

\NewDocumentEnvironment{redacted}{b}{%
}{%
    \phantom{%
        \begin{minipage}{1.0\textwidth}%
        #1%
        \end{minipage}%
    }%
}

\begin{document}
\lipsum[1]
\begin{redacted}
This is\\
some\\
secret content.
\end{redacted}
\lipsum[2]
\end{document}

在此处输入图片描述

相关内容