如何重新定义环境,如 \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

仅使用该命令的其他字符:

\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}

相关内容