인수 유무에 관계없이 앨리어싱?

인수 유무에 관계없이 앨리어싱?

명령을 다른 명령에 별칭으로 지정하는 올바른 방법은 무엇입니까?

\newcommand*{\keyword}{\emph}

또는:

\newcommand*{\keyword}[1]{\emph{#1}}

두 번째가 더 명확하다는 사실 외에 실제 차이점이 있습니까?

답변1

차이는 다음과 같을 때 발생합니다.별칭이 붙은명령은 선택적 인수를 취합니다.

\newcommand*\keyword{\othercommand}

가능한 모든 선택적 인수를 처리할 수 있습니다. 하지만

\newcommand*\keyword[1]{\othercommand{#1}}

\othercommand선택적 인수 없이 호출되는 상황만 처리할 수 있습니다 .

의 경우에는 \emph선택할 수 있는 인수가 없으므로 이는 문제가 되지 않습니다. 따라서 어느 접근 방식이든 잘 작동할 것입니다.

당신이 단지 엄격할 때앨리어싱, 내 개인적인 의견은 첫 번째를 사용하는 것입니다

\newcommand*\keyword{\othercommand}

앨리어싱 이상의 작업을 수행하는 상황에서는 다음을 사용합니다.

\newcommand*\keyword[1]{\othercommand{#1}}

순전히 예를 들어,

\newcommand*\keyword[1]{`\emph{#1}'}

(다른 사람들은 따옴표가 불필요하다고 반대할 가능성이 높지만 \emph 나는 단지 "단순한 앨리어싱 이상의 것"이 의미하는 바를 설명하기 위해 이것을 의미합니다.)

렛팅

이것이 주석에 나왔으므로 \let명령 지정에 대해 몇 가지 언급하겠습니다.

때로는 LaTeX 매크로의 기본 동작을 변경하고 싶을 때가 있습니다. 예를 들어 다음과 같이 정의된 매크로가 있다고 가정합니다.

\newcommand*\somecommand[1]{\emph{#1}}

하지만 당신은 그것이 다르게 행동하기를 원합니다. 그런 다음 간단히 다음과 같이 다시 작성할 수 있습니다.

\renewcommand*\somecommand[1]{\textbf{#1}}

그러나 원래의 정의를 정말로 갖고 싶은 상황에 직면할 수도 있습니다. 그런 경우에는 이전에갱신명령을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

\let\oldsomecommand\somecommand
\renewcommand*\somecommand[1]{\textbf{#1}}

이제 \somecommand원하는 대로 작동하지만 \oldsomecommand이전 동작을 제공하는 명령도 사용할 수 있습니다.

\newcommand\keyword{\emph}너트 셸에서 을 쓰면 \keyword로 확장됩니다 \emph. \let\keyword\emph을 쓰면 가 아닌 의 정의로 \keyword확장됩니다 .\emph\emph

그러나 \let항상 명령의 모든 기능을 캡처할 수 있는 것은 아닙니다.축복받은/저주받은선택적 인수를 사용합니다. 이 사이트에는 이러한 상황을 처리하는 방법에 대한 많은 게시물이 있으므로 여기서는 몇 가지만 알려 드리겠습니다.

관련 정보