如何获取被 begin 和 end 命令包围的文本

如何获取被 begin 和 end 命令包围的文本

我想要获得一个被开始和结束命令包围的文本,如下所示。

\begincommand
Here any text is written.
\endcommand

\surroundedtext % this command is replaced with "Here any text is written."

当然,如果我定义 \begincommand 使其接受一个参数,那么该对象就完成了。

\def\begincommand#1{...}
\begincommand{Here any text is written.}

但是,我不想使用大括号。如果您有解决方案,请告诉我。

答案1

假设使用 Plain TeX,你可以定义

\long\def\begincommand#1 \endcommand{...}

但这会迫使你写

\begincommand
Text to be stored
\endcommand

单独成\endcommand一行或

\begincommand
Text to be stored \endcommand

在最后一个单词和 之间有一个空格\endcommand(但在 之前没有空行\encommand)。或者,你可以定义

\long\def\begincommand#1\endcommand{...}

然后对可能出现的最后一个空格(当\endcommand它单独位于一行时)进行处理。为了给出更好的建议,应该了解上下文。

如果您使用的是 LaTeX,那么这不是好的编程风格。如果您正在寻找的是“定义”的环境形式,那么environLeo Liu 建议的包很方便,但在定义使用环境主体以供后续使用的命令时会遇到一些挑战。

\usepackage{environ}

\NewEnviron{command}{%
  \long\xdef\surroundedtext{%
    \unexpanded{<pre>}%
    \unexpanded\expandafter{\BODY}%
    \unexpanded{<post>}}%
  }

因此代码

\begin{command}
Text to be stored
\end{command}

相当于

\newcommand{\surroundedtext}{<pre>Text to be stored<post>}

添加你需要的任何东西来代替<pre><post>

答案2

您可以看到 LaTeX 包的实现environ,或者直接使用这个包。

例子:

\documentclass{article}
\usepackage{environ}
\NewEnviron{foo}{(\textbf{\BODY})}
\begin{document}
\begin{foo}
body
\end{foo}
\end{document}

相关内容