\begin{xxx} ... \end{xxx} のような環境を再定義する方法

\begin{xxx} ... \end{xxx} のような環境を再定義する方法

パッケージを使用するテキストを翻訳していますがcomment、使用法は次のようになります。

\begin{en}
 ... some English text
\end{en}

\begin{zh}
... corresponding Chinese text
\end{zh}

の前に\excludecommand{en}またはを使用することで、最終的な PDF ドキュメント内のテキストを制御できます。\includecommand{en}\begin{document}

\begin{}/\end{}しかし、これを段落ごとに追加するのは面倒なので、私が欲しいのは次のようになります。

\en{
 ... some English text
}

\zh{
... corresponding Chinese text
}

これは入力がはるかに簡単です。次のようにコマンドを作成します。

\newcommand{\zh}[1]{\begin{zh}#1\end{zh}}
\newcommand{\en}[1]{\begin{en}#1\end{en}}

しかし、これは のようなコンパイル エラーを引き起こしますrunaway argument。この状況で を使用してこれを動作させるにはどうすればよいですかnewcommand?

答え1

問題は、環境が定義される\enときに定義される既存のコマンドを再定義しようとしていることですen( も同様です\enden)。再定義する解決策は、ほとんど環境の一般的な解決策は、まず の定義をxxx次のように保存することです\OldXxx

\let\OldXxx\xxx

そして、 とを\xxx使用してマクロを再定義します。\OldXxx\endxxx

\renewcommand{\xxx}[1]{\OldXxx#1\endxxx}

ここに画像の説明を入力してください

注記:

  • コメントによると、これはしませんあらゆる逐語的タイプの環境で動作します。

コード:

\documentclass{article}

\newenvironment{en}{%
}{%
}%


\begin{document}
\begin{en}
 \ldots some English text in environment
\end{en}

\let\OldEn\en
\renewcommand{\en}[1]{\OldEn#1\enden}

\en{\ldots some more English text in macro \ldots}

\end{document}

答え2

使用するだけ1つコマンドの他の文字:

\documentclass{article}
\newenvironment{en}{}{}
\newenvironment{zh}{}{}

\newcommand\Zh[1]{\begin{zh}#1\end{zh}}
\newcommand\En[1]{\begin{en}#1\end{en}}

%\renewcommand\Zh[1]{} %%% enable if it should be excluded
%\renewcommand\En[1]{} %%% enable if it should be excluded

\begin{document}
\En{ \ldots some English text in environment (En)}

\Zh{ \ldots some more English text in macro \ldots (Zh)}

\end{document}

関連情報