como redefinir ambientes como \begin{xxx} ... \end{xxx}

como redefinir ambientes como \begin{xxx} ... \end{xxx}

Estou traduzindo alguns textos que usam o commentpacote, 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 \enque é definido quando o enambiente é definido (como acontece \enden). A solução para redefinirmaioriaambientes é primeiro salvar a definição de xxxcomo \OldXxx:

\let\OldXxx\xxx

e então redefina a \xxxmacro usando \OldXxxe \endxxx:

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

insira a descrição da imagem aqui

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}

informação relacionada