LaTeX의 프로그래밍 가능성을 사용하는 방법

LaTeX의 프로그래밍 가능성을 사용하는 방법

\newcommand, \newcommand*, \renewcommand, \renewcommand*, \newenvironment, \newenvironment*, \renewenvironment는 어떻게 \newenvironment*작동하며 차이점은 무엇입니까?

답변1

OP를 만족시키기 위해 이에 대답하려면 ...

매크로 정의 명령 전체가 매우 서로 연결되어 있습니다.

  • \newcommand{\foo}[num_of_args][opt first arg value]{% definition} 정의하다\foo
  • \newcommand*{\foo}[num_of_args][opt first arg value]{% definition}\foo인수에서 구문 구분을 정의 하지만 허용하지 않습니다.
  • \renewcommand{\foo}이미 존재하는 명령을 재정의합니다.\foo

  • \renewcommand*{\foo}\foo을(를) 제한 하여 재정의합니다 no-parbreak.

  • \DeclareRobustCommand등과 동일한 구문을 사용하여 \newcommand명령을 강력하게 만듭니다(즉, 보호/확장 불가능).

또한 (숨김) \newcommand및 친척이 자동으로 정의하므로 자체적 \endfoo으로 말할 수 없습니다 \newcommand{\endfoo}. 이에 대한 자세한 내용은 내 질문을 참조하십시오.\end.... 매크로 이름이 LaTeX2e에 예약되어 있나요?

환경 명령: - \newenvironment{fooenv}[num_of_args]{first opt arg]{% startcode}{endcode}이라는 환경을 정의합니다 fooenv. 즉, 와 함께 사용할 수 있습니다 \begin{fooenv}...\end{fooenv}. 이 쌍 사이의 콘텐츠는 그룹화되어 있습니다. 즉 \(re)newcommand, 길이 변경은 이 쌍 내에서만 적용되고 외부에는 표시되지 않습니다. 즉, 안전합니다( \global사용하지 않는 한 - \renewenvironment기존 환경을 재정의 - \newenvironment*제한적 \renewenvironment*으로 적용됩니다 no-parbreak.

또한 일부 명령이 실제로 정의되었는지 확인하는 데 사용할 수 있는 \providecommand( 와 동일한 구문 )이 있습니다. \newcommand이미 정의되어 있으면 \providecommand아무 작업도 수행되지 않습니다.

모든 뒤에 있는 기계는 기본 TeX \def명령입니다.
또한 다음을 참조하세요.\newcommand와 \newcommand*의 차이점

etoolbox및 의 대안xparse

  • 패키지 는 강력한 명령을 만들기 위한 etoolbox를 설정합니다 \(re)newrobustcmd*.

  • xparsepackage: \NewDocumentCommand, \RenewDocumentCommand, \ProvideDocumentCommand\NewDocumentEnvironmentand \ProvideDocumentEnvironment는 etc \DeclareDocumentEnvironment보다 더 나은 인수 처리 기능을 갖춘 강력한 버전입니다 \newcommand. 확장 가능 버전도 있으므로 \DeclareExpandableDocumentCommand주의해서 사용해야 합니다(설명서에 명시된 대로 xparse).

관련 정보