Я работаю над созданием музыкального пакета и хотел бы иметь новые команды с короткими именами для ясности... Например, я использую \bar
, \k
, \arg
но они уже определены в LaTeX
Есть ли какой-нибудь трюк, чтобы все эти команды можно было использовать хотя бы локально так, как мне нравится?
Другими словами, возможно ли определить некоторые специальные команды внутри моего пакета, скажем \mypackageON
, так \mypackageOFF
, чтобы если я заключаю текст с указанными выше командами start-end, не возникало проблем с использованием \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
т. д., а новым макросам присваиваются префиксы "music". Затем \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}