как переопределить такие среды, как \begin{xxx} ... \end{xxx}

как переопределить такие среды, как \begin{xxx} ... \end{xxx}

Я перевожу текст, в котором используется этот commentпакет. Его использование выглядит следующим образом:

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

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

Используя \excludecommand{en}или \includecommand{en}перед \begin{document}, мы можем контролировать текст вне или в конечном PDF-документе.

Но это слишком хлопотно, чтобы добавлять \begin{}/\end{}к каждому абзацу, я хочу следующее:

\en{
 ... some English text
}

\zh{
... corresponding Chinese text
}

это гораздо проще набирать. и я создаю команды следующим образом:

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

Но это вызывает ошибку компиляции runaway argument, как заставить его работать в этой ситуации, используя newcommand?

решение1

Проблема в том, что вы пытаетесь переопределить существующую команду \en, которая определяется при enопределении среды (как это делает \enden). Решение переопределитьбольшинствосреды — сначала сохранить определение xxxкак \OldXxx:

\let\OldXxx\xxx

а затем переопределите \xxxмакрос, используя \OldXxxи \endxxx:

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

введите описание изображения здесь

Примечание:

  • Согласно комментариям, этоне будетработа с любым типом сред.

Код:

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

решение2

Используйте толькоодиндругой символ для команды:

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

Связанный контент