Estoy trabajando en la construcción de un paquete de música y me gustaría tener nuevos comandos con nombres cortos para mayor claridad... Entonces, por ejemplo, uso ,, \bar
pero ya están definidos en ¿Hay algún truco para que todos estos comandos puedan ser? ¿Se usa al menos localmente con la forma que me gusta?\k
\arg
LaTeX
En otras palabras, ¿es posible definir algunos comandos especiales dentro de mi paquete, por ejemplo, \mypackageON
de \mypackageOFF
modo que si incluyo un texto con los comandos de inicio y fin anteriores no surja ningún problema con el uso de \bar
etc? ¿Existe una mejor estrategia? Disculpe por esta pregunta general...
Respuesta1
Podría proporcionar un entorno llamado, digamos myenv
, que redefina \arg
, \bar
etc. De esa manera, el alcance de las redefiniciones termina automáticamente en \end{myenv}
.
Un ejemplo de trabajo sencillo:
\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}
Aquí hay una versión que usa "interruptores", llamados \mypackageON
y \mypackageOFF
, en lugar de un entorno. Según la sugerencia hecha por Ulrike en un comentario, el código primero guarda las versiones originales de \arg
, \bar
etc., y las nuevas macros reciben prefijos de "música". Luego, \mypackageON
activa las versiones de las macros relacionadas con la música y \mypackageOFF
activa las versiones originales de las macros. ( \LetLtxMacro
se usa en lugar de \let
, en caso de que algunos de los comandos que se están redefiniendo tomen argumentos opcionales y/o hayan 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}