나는 음악 패키지를 만드는 작업을 하고 있는데 명확성을 위해 짧은 이름을 가진 새로운 명령을 갖고 싶습니다... 그래서 예를 들어 , 를 사용 \bar
하지만 \k
이미 \arg
정의되어 있습니다. LaTeX
이 모든 명령이 가능하도록 몇 가지 트릭이 있습니까? 적어도 내가 좋아하는 방식으로 로컬에서 사용됩니까?
즉, 내 패키지 내에 몇 가지 특수 명령을 정의하여 \mypackageON
위 \mypackageOFF
의 시작-끝 명령으로 텍스트를 묶으면 등을 사용해도 문제가 발생하지 않도록 하는 것이 가능합니까 \bar
? 더 나은 전략이 있나요? 일반적인 질문이라 죄송합니다...
답변1
, 등을 myenv
재정의하는 이라는 환경을 제공할 수 있습니다. 이렇게 하면 재정의 범위가 자동으로 로 끝납니다 .\arg
\bar
\end{myenv}
간단한 작업 예:
\documentclass{article}
\usepackage[T1]{fontenc} % Enable "\k" ("ogonek") macro
\newenvironment{myenv}{%
% Provide (re)definitions of \arg, \bar, etc
\def\arg{...}
\def\bar{...}
\def\k{...}}{}
\begin{document}
$\arg a$, $\bar{b}$, \k{c}
\begin{myenv}
\arg a, \bar{b}, \k{c}
\end{myenv}
$\arg a$, $\bar{b}$, \k{c}
\end{document}
다음은 환경 대신 \mypackageON
명명 된 "스위치"를 사용하는 버전입니다 . \mypackageOFF
주석에서 Ulrike의 제안에 따라 코드는 먼저 등의 원래 버전을 저장하고 \arg
새 \bar
매크로에는 "음악" 접두사가 부여됩니다. 그런 다음 \mypackageON
음악 관련 버전의 매크로를 활성화하고 \mypackageOFF
원래 버전의 매크로를 활성화합니다. ( 재정의되는 명령 중 일부가 선택적 인수를 사용하거나 "강력"하다고 선언된 경우를 \LetLtxMacro
대비하여 대신 사용됩니다 .)\let
\documentclass{article}
\usepackage[T1]{fontenc} % Enable "\k" macro ("ogonek")
% Save the old versions of the macros
\usepackage{letltxmacro} % for "\LetLtxMacro" command
\LetLtxMacro\origarg\arg
\LetLtxMacro\origbar\bar
\LetLtxMacro\origk\k
% Define some new macros
\newcommand\musicarg[1]{#1} % "#1" just regurgitates the argumenet
\newcommand\musicbar[1]{#1}
\newcommand\musick[1]{#1}
\newcommand\mypackageON{% enable the music-related versions
\LetLtxMacro\arg\musicarg
\LetLtxMacro\bar\musicbar
\LetLtxMacro\k\musick}
\newcommand\mypackageOFF{% enable the original versions
\LetLtxMacro\arg\origarg
\LetLtxMacro\bar\origbar
\LetLtxMacro\k\origk}
\begin{document}
$\arg a$, $\bar{b}$, \k{c}
\mypackageON
\arg a, \bar{b}, \k{c}
\mypackageOFF
$\arg a$, $\bar{b}$, \k{c}
\end{document}