Estoy traduciendo un texto que usa el comment
paquete, 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 \en
que se define cuando en
se define el entorno (como lo hace \enden
). La solución para redefinirmayoríaentornos es guardar primero la definición de xxx
como \OldXxx
:
\let\OldXxx\xxx
y luego redefinir la \xxx
macro usando \OldXxx
y \endxxx
:
\renewcommand{\xxx}[1]{\OldXxx#1\endxxx}
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}