Я перевожу текст, в котором используется этот 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}