
\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*
.xparse
package:\NewDocumentCommand
,\RenewDocumentCommand
,\ProvideDocumentCommand
및\NewDocumentEnvironment
and\ProvideDocumentEnvironment
는 etc\DeclareDocumentEnvironment
보다 더 나은 인수 처리 기능을 갖춘 강력한 버전입니다\newcommand
. 확장 가능 버전도 있으므로\DeclareExpandableDocumentCommand
주의해서 사용해야 합니다(설명서에 명시된 대로xparse
).