如何重新定義環境,例如 \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}or\includecommand{en}之前\begin{document},我們可以控制最終 PDF 文件中的文字。

但這太麻煩了,無法\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環境是先保存as的定義\OldXxx

\let\OldXxx\xxx

然後\xxx使用\OldXxxand重新定義巨集\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}

相關內容