如何製作一個不與其他包衝突的包?

如何製作一個不與其他包衝突的包?

我正在建立一個音樂包,為了清楚起見,我希望使用短名稱的新命令...因此,例如我使用\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}

相關內容