Estou traduzindo alguns textos que usam o comment
pacote, seu uso parece assim:
\begin{en}
... some English text
\end{en}
\begin{zh}
... corresponding Chinese text
\end{zh}
Usando \excludecommand{en}
ou \includecommand{en}
antes \begin{document}
, podemos controlar a saída ou a entrada do texto no documento PDF final.
Mas isso é muito difícil de adicionar \begin{}/\end{}
para cada parágrafo, o que eu quero é o seguinte:
\en{
... some English text
}
\zh{
... corresponding Chinese text
}
isso é muito mais simples de digitar. e eu crio os comandos assim:
\newcommand{\zh}[1]{\begin{zh}#1\end{zh}}
\newcommand{\en}[1]{\begin{en}#1\end{en}}
Mas isso causa erros de compilação como runaway argument
, como fazê-lo funcionar nesta situação usando newcommand
?
Responder1
O problema é que você está tentando redefinir um comando existente \en
que é definido quando o en
ambiente é definido (como acontece \enden
). A solução para redefinirmaioriaambientes é primeiro salvar a definição de xxx
como \OldXxx
:
\let\OldXxx\xxx
e então redefina a \xxx
macro usando \OldXxx
e \endxxx
:
\renewcommand{\xxx}[1]{\OldXxx#1\endxxx}
Observação:
- De acordo com os comentários, issonão vaitrabalhar com qualquer tipo literal de ambiente.
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}
Responder2
Use apenasumoutro caractere para o 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}