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
, \arg
mas eles já estão definidos em LaTeX
Existe 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, \mypackageON
e \mypackageOFF
de modo que se eu incluir um texto com os comandos start-end acima, nenhum problema surgirá com o uso de \bar
etc? 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 \mypackageON
e \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
, \bar
etc, e as novas macros recebem prefixos de "música". Em seguida, \mypackageON
ativa as versões das macros relacionadas à música e \mypackageOFF
ativa 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".)
\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}