私は音楽パッケージの構築に取り組んでおり、わかりやすくするために短い名前の新しいコマンドを用意したいと考えています...たとえば、、を使用しています\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}