我正在构建一个音乐包,为了清楚起见,我想使用带有简称的新命令...例如,我使用,,\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}