Como alguém poderia fazer um pacote que não entrasse em conflito com os outros?

Como alguém poderia fazer um pacote que não entrasse em conflito com os outros?

Estou trabalhando na construção de um pacote de música e gostaria de ter novos comandos com nomes curtos para maior clareza... Então por exemplo eu uso \bar, \k, \argmas eles já estão definidos em LaTeXExiste algum truque para que todos esses comandos possam ser usado pelo menos localmente do jeito que eu gosto?

Em outras palavras, é possível definir alguns comandos especiais dentro do meu pacote, digamos, \mypackageONe \mypackageOFFde modo que se eu incluir um texto com os comandos start-end acima, nenhum problema surgirá com o uso de \baretc? Existe uma estratégia melhor? Desculpe-me por esta pergunta geral ...

Responder1

Você poderia fornecer um ambiente chamado, digamos, myenv, que redefine \arg, \bar, etc. Dessa forma, o escopo das redefinições termina automaticamente com \end{myenv}.

Um exemplo simples de trabalho:

\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}

Aqui está uma versão que usa “switches” – nomeados \mypackageONe \mypackageOFF– em vez de um ambiente. De acordo com a sugestão feita por Ulrike em um comentário, o código primeiro salva as versões originais de \arg, \baretc, e as novas macros recebem prefixos de "música". Em seguida, \mypackageONativa as versões das macros relacionadas à música e \mypackageOFFativa as versões originais das macros. ( \LetLtxMacroé usado em vez de \let, apenas no caso de alguns dos comandos que estão sendo redefinidos receberem argumentos opcionais e/ou terem sido declarados "robustos".)

insira a descrição da imagem aqui

\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}

informação relacionada