他のパッケージと競合しないパッケージを作成するにはどうすればよいでしょうか?

他のパッケージと競合しないパッケージを作成するにはどうすればよいでしょうか?

私は音楽パッケージの構築に取り組んでおり、わかりやすくするために短い名前の新しいコマンドを用意したいと考えています...たとえば、、を使用しています\bar\k\argこれらはすでに で定義されていますLaTeX。これらすべてのコマンドを少なくともローカルで好きなように使用できるようにするためのトリックはありますか?

言い換えると、たとえば、パッケージ内に特別なコマンドを定義して、上記の開始終了コマンドを含むテキストを囲む場合に、などを使用しても問題が発生しないようにすることは可能ですか\mypackageON?\mypackageOFFもっと\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新しいマクロに「音楽」プレフィックスを付けます。次に、\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}

関連情報