wie man Umgebungen wie \begin{xxx} ... \end{xxx} neu definiert

wie man Umgebungen wie \begin{xxx} ... \end{xxx} neu definiert

Ich übersetze einen Text, der das commentPaket verwendet. Die Verwendung scheint folgendermaßen zu sein:

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

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

Durch die Verwendung von \excludecommand{en}oder \includecommand{en}vor \begin{document}können wir den Text im oder aus dem endgültigen PDF-Dokument steuern.

Es ist jedoch zu mühsam, dies jedem Absatz hinzuzufügen \begin{}/\end{}. Ich möchte Folgendes:

\en{
 ... some English text
}

\zh{
... corresponding Chinese text
}

das ist viel einfacher einzutippen. Und ich erstelle die Befehle so:

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

Dies führt jedoch zu einem Kompilierungsfehler. runaway argumentWie kann es in dieser Situation mithilfe von zum Laufen gebracht werden newcommand?

Antwort1

Das Problem besteht darin, dass Sie versuchen, einen vorhandenen Befehl neu zu definieren \en, der definiert wird, wenn die enUmgebung definiert wird (wie dies auch der Fall ist \enden). Die Lösung zur Neudefinitionam meistenUmgebungen besteht darin, zunächst die Definition wie xxxfolgt zu speichern \OldXxx:

\let\OldXxx\xxx

und definieren Sie das \xxxMakro dann mit \OldXxxund neu \endxxx:

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

Bildbeschreibung hier eingeben

Notiz:

  • Wie in den Kommentaren, diesGewohnheitArbeiten Sie mit allen Verbatim-Umgebungen.

Code:

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

Antwort2

Verwenden Sie nureinsanderes Zeichen für den Befehl:

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

verwandte Informationen