명령을 다른 명령에 별칭으로 지정하는 올바른 방법은 무엇입니까?
\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
항상 명령의 모든 기능을 캡처할 수 있는 것은 아닙니다.축복받은/저주받은선택적 인수를 사용합니다. 이 사이트에는 이러한 상황을 처리하는 방법에 대한 많은 게시물이 있으므로 여기서는 몇 가지만 알려 드리겠습니다.
- 보다\let과 \def의 차이점은 무엇입니까?그것의 기본적인 요점을 위해.
- 보다\LetLtxMacro는 언제 사용하나요?
\let
옵션과 관련된 문제를 해결하는 방법 에 대한 자세한 설명을 참조하세요 . - 또한 참조하십시오"닫힌"(사각형) 루트 기호
\let
(원래 질문은 실제로 ting 에 관한 것이 아니더라도 .)