cómo redefinir entornos como \begin{xxx} ... \end{xxx}

cómo redefinir entornos como \begin{xxx} ... \end{xxx}

Estoy traduciendo un texto que usa el commentpaquete, su uso parece el siguiente:

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

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

Al usar \excludecommand{en}o \includecommand{en}antes \begin{document}, podemos controlar el texto dentro o fuera del documento PDF final.

Pero esto es demasiado complicado de agregar \begin{}/\end{}para cada párrafo, lo que quiero es lo siguiente:

\en{
 ... some English text
}

\zh{
... corresponding Chinese text
}

esto es mucho más sencillo de escribir. y creo los comandos así:

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

Pero esto causa un error de compilación como runaway argument, ¿cómo hacer que funcione en esta situación usando newcommand?

Respuesta1

El problema es que está intentando redefinir un comando existente \enque se define cuando ense define el entorno (como lo hace \enden). La solución para redefinirmayoríaentornos es guardar primero la definición de xxxcomo \OldXxx:

\let\OldXxx\xxx

y luego redefinir la \xxxmacro usando \OldXxxy \endxxx:

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

ingrese la descripción de la imagen aquí

Nota:

  • Según los comentarios, estonotrabajar con cualquier tipo de entorno textual.

Código:

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

Respuesta2

Utilice sólounootro carácter para el comando:

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

información relacionada