如果您无意中发布了一个与另一个包冲突的包,而该冲突涉及环境的相互竞争的定义,那么最好的办法是什么?
在这种情况下,两者防护树和总线防护定义一个prooftree
环境。因此,如果不进行修改,包就不能在同一个文档中加载。
这LaTeX for Logicians 建议的解决方案是重命名prooftrees.sty
为tableaux.sty
,然后查找并替换所有出现的prooftrees
bytableaux
和所有出现的prooftress
by tableau
。tableau
然后可以将环境用于防护树树木prooftree
和总线防护樹木。
但是,我并不认为这是个好建议。首先,在需要tableaux.sty
更新时不会更新prooftrees.sty
,因此维护起来很棘手。其次,这无疑会引起用户的疑问,他们最终会忘记他们的版本tableaux.sty
实际上是(可能已过时的) 的副本prooftrees.sty
。
报告冲突的用户建议我重命名防护树作为场景和。prooftree
但tableau
存在场景包首先排除了这个名字。
然而,事实确实如此场景实际上包括tableau.sty
和不是 tableaux.sty
,正如我所料。
在文档级别解决此问题的一种方法是添加类似
\usepackage{prooftrees}
\let\othername\prooftree
\undef\prooftree
\undef\endprooftree
\usepackage{bussproofs}
该文件的前言部分。othername
然后可以用于防护树树木prooftree
和总线防护樹木。
因此,我可以做的一件事就是tableaux.sty
在防护树加载prooftrees.sty
然后执行
\usepackage{prooftrees}
\let\tableau\prooftree
\undef\prooftree
\undef\endprooftree
所以说
\usepackage{tableaux}
\usepackage{bussproofs}
可tableau
用于防护树树木prooftree
和总线防护樹木。
这有明显的缺点:tableaux.sty
将由防护树而不是场景,而tableau.sty
由场景。此外,tableau
环境还将由防护树而不是场景。不过,我不认为这会产生冲突场景因为据我所知,tableau.sty
既不提供也不提供tableau
,并且也不提供包含在tableaux
minimum.sty
场景。
但这种方法也要求用户按照正确的顺序加载软件包,因为如果人们这样写,它将无法工作
\usepackage{bussproofs}
\usepackage{tableaux}
或者我可以制作tableaux.sty
主文件并prooftrees.sty
加载tableaux.sty
然后
\let\prooftree\tableau
\undef\tableau
\undef\endtableau
或者我可以在序言末尾测试是否prooftree
定义,如果没有定义,则使其成为的别名tableau
。
但所有这些选项都很麻烦和复杂。此外,我不确定上述解决方法是否真的安全。
在聊天中,芭芭拉建议在文档中添加一个解决方法。但是,我不知道有多少人会真正阅读它,而不是转向网络并创建个性化的tableaux.sty
。另一方面,也许我夸大了人们这样做的弊端,毕竟这并不是一个糟糕的解决方法。
当然,如果总线防护定义bussproof
而不是prooftree
.... :(
答案1
我不会尝试太过花哨地检测包裹顺序等,因为这会使行为难以记录。
我只有两个包选项prooftree
, tableau
并且如果使用任一选项,则调用该环境。
如果两个选项都未使用,则由您决定默认设置。您可以默认为tableau
这样可以避免冲突,但[prooftrees]
如果现有用户不想更改文档,则让他们添加,或者将其默认为[prooftrees]
除非该环境已经定义,在这种情况下,它默认为这样可以使仅加载一个包的常见情况像以前一样工作,然后[tableau]
加载的情况可以避免冲突。bussproofs
prooftrees
这会导致加载bussproofs
后prooftrees
出现错误,但您只能通过延迟一切来开始文档来避免这种情况,所以我可能不会这样做,只是记录用户可能需要的选项tableau
或更改包顺序。
答案2
在选项部分中,添加
\def\prooftree@name{prooftree}
\DeclareOption{altprooftree}{\def\prooftree@name{altprooftree}}
然后在最后一部分
\NewEnviron{\prooftree@name}[1]{%
[...]
}
因此,想要使用的用户bussproofs
可以加载
\usepackage[altprooftree]{prooftrees}
altprooftree
并在文档中使用。