如何才能制作一个不与其他包冲突的包?

如何才能制作一个不与其他包冲突的包?

我正在构建一个音乐包,为了清楚起见,我想使用带有简称的新命令...例如,我使用,,\bar但它们已经在是否有一些技巧中定义,以便所有这些命令至少可以以我喜欢的方式在本地使用?\k\argLaTeX

换句话说,是否可以在我的包中定义一些特殊命令,比如说,\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}

相关内容