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

관련 정보