Как можно создать пакет, который не будет конфликтовать с другими?

Как можно создать пакет, который не будет конфликтовать с другими?

Я работаю над созданием музыкального пакета и хотел бы иметь новые команды с короткими именами для ясности... Например, я использую \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}

Связанный контент