我有两个包想要在同一个文档中使用。具体来说,musixtex
和tengwarscript
。
但是它们确实存在冲突。两个包使用一些相同的命令,但显然用于完全不同的事情。有没有办法在同一个文档中加载两个包,但只临时或间歇地加载其中一个?
答案1
(基本上就是我评论里的内容,但希望这里能更清楚一点。)
tengwarscript
我发现在和musixtex
中都定义的唯一命令是\Tten
。在tengwarscript
它的定义中\newcommand
,它会检查它是否已经定义(如果是,则会抛出错误)。在\musixtex
它的定义中,它会通过\let
(不检查)进行定义,具体来说。此外,在中\let\Tten=\ttie
没有其他明确的使用。所以我会保留的定义。对于版本,您可以使用它本身,或者定义另一个与它等同的命令,比如。由于明确检查是否已经定义但没有定义,因此加载它们的正确顺序是第一和第二。以下是执行此操作的一种方法:\Tten
musixtex
tengwarscript
\Tten
musixtex
\ttie
\mTten
tengwarscript
\Tten
musixtex
tengwarscript
musixtex
\documentclass{article}
\usepackage{tengwarscript}
\let\tengwarTten=\Tten
\usepackage{musixtex}
\let\mTten=\Tten
\let\Tten=\tengwarTten
\begin{document}
\end{document}
(哦,我想看最终文件……)
正如 Marc van Leeuwen 在评论中指出的那样,由于\Tten
不需要musixtex
保存(因为它已经作为 存在\ttie
),因此冲突的最短解决方案是:
\documentclass{article}
\usepackage{musixtex}
\let\Tten=\undefined % \relax will do here as well
\usepackage{tengwarscript}
\begin{document}
\end{document}
(假设没有人定义过\undefined
。如果某个白痴这样做了,那么\relax
就会这样做。但是,我怀疑任何人都可以重新定义\undefined
或\relax
而不破坏一些严重的东西,所以我认为两者都很安全,最\relax
安全。)
答案2
正如 Andrew 所提到的,当两个包定义相同的符号名称时,防止符号名称冲突的一般程序是加载第一个包,重命名冲突的符号,然后加载第二个包。\savesymbol
来自的命令保存符号包可用于\savesymbol{XXX}
将符号从重命名\XXX
为\origXXX
:
\documentclass{article}
\usepackage{savesym}
\usepackage{musixtex}
\savesymbol{Tten}
\usepackage{tengwarscript}
\begin{document}
...
\end{document}