다른 패키지와 충돌하지 않는 패키지를 어떻게 만들 수 있을까요?

다른 패키지와 충돌하지 않는 패키지를 어떻게 만들 수 있을까요?

나는 음악 패키지를 만드는 작업을 하고 있는데 명확성을 위해 짧은 이름을 가진 새로운 명령을 갖고 싶습니다... 그래서 예를 들어 , 를 사용 \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}

관련 정보