5

\NewEnviron(パッケージ 'environ') で作成された環境を古いものにラップしようとしています\newenvironment:

\NewEnviron{test}{\colorbox[gray]{0.7}{\BODY}}
\newenvironment{wrapper}{\begin{test}}{\end{test}}

\begin{wrapper}
debug me
\end{wrapper}

ただし、これにより奇妙なエラーが発生します。

LaTeX エラー: 入力行 15 の \begin{test} が \end{wrapper} で終了しています。LaTeX エラー: 入力行 15 の \begin{wrapper} が \end{document} で終了しています。

—に置き換える\NewEnviron{test}{aaa(\BODY)bbb}と、\newenvironment{test}{aaa(}{)bbb}すべてが期待どおりに機能します。\NewEnviron何らかの理由で終わりを見つけられないようです。

「floatfig」を a にラップして魔法をかけようとしている\colorboxので、環境に変換\colorboxして別の環境にラップする方法が必要です。新しいコマンドを定義できますが、あまり良い考えではありません。

4

2 に答える 2

6

問題はそれで\NewEvironあり\newenvironment、さまざまな方法で機能します。

1) isとis\newenvironment{test}{aaa(}{)bbb}の 2 つのコマンドを定義します。\testaaa(\endtest)bbb

\begin{test}に展開され\testます。

\end{test}に展開され、スコープが「むしろ」で\endtest始まることを確認します。たとえば、begin{test}\begin{something else}\begin{wrapper}

2)異なる方法で\NewEviron{test}{aaa(\BODY)bbb}定義します。\testまず、次のトリックを使用して\testキャッチします\BODY

\def\test#1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}

(名前\testcontinueは異なる場合があります) および挿入物aaa(\BODY)bbb. 次に、入力行がではなく で終わっていることを\testcontinue確認します。マクロ は実行されないため不要です。\end\end{test}\end{something else}\endtest

あなたのコードを見てください:

\begin{wrapper}
debug me               
\end{wrapper} 

\begin{wrapper}に展開され\begin{test}ます。\begin{test}に展開され\testます。 \testキャッチ\BODY。注意!\BODYに等しいdebug meです。そして今、 で終わった後にそれを\testcontionueチェックします。それは本当ではない。欠席だ。あります。\end\BODY\end{test}\end{test}\end{wrapper}

\end{wrapper}に展開する必要があると言いたいです\end{test}。しかし\end、ラッパーが食べられる前に

macro \test: #1\end{\def\BODY{#1}aaa(\BODY)bbb\testcontinue}

となり、実行できません。

うまく説明できることを願っています。

于 2010-05-26T13:58:37.933 に答える
1

別の環境でラップできる環境を作成するハックなトリックを見つけました。次のように saveBox を使用する必要があります。

\newenvironment{example}[2][]{%
    \newsavebox{\exampleStore} % Box storage
    \begin{lrbox}{\exampleStore} % Start capturing the input
    }{%
        \end{lrbox} % Stop capturing the input
    \colorbox[gray]{0.7}{%
            \usebox{\NBstorage} % Load the box's contents
            }%
        }%
    }%
于 2010-05-26T17:16:10.237 に答える