如何应对我无意中给毫无戒心的公众造成的已发布软件包中冲突的环境名称?

如何应对我无意中给毫无戒心的公众造成的已发布软件包中冲突的环境名称?

如果您无意中发布了一个与另一个包冲突的包,而该冲突涉及环境的相互竞争的定义,那么最好的办法是什么?

在这种情况下,两者防护树总线防护定义一个prooftree环境。因此,如果不进行修改,包就不能在同一个文档中加载。

LaTeX for Logicians 建议的解决方案是重命名prooftrees.stytableaux.sty,然后查找并替换所有出现的prooftreesbytableaux和所有出现的prooftressby tableautableau然后可以将环境用于防护树树木prooftree总线防护樹木。

但是,我并不认为这是个好建议。首先,在需要tableaux.sty更新时不会更新prooftrees.sty,因此维护起来很棘手。其次,这无疑会引起用户的疑问,他们最终会忘记他们的版本tableaux.sty实际上是(可能已过时的) 的副本prooftrees.sty

报告冲突的用户建议我重命名防护树作为场景和。prooftreetableau存在场景包首先排除了这个名字。

然而,事实确实如此场景实际上包括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,并且也不提供包含在tableauxminimum.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

我不会尝试太过花哨地检测包裹顺序等,因为这会使行为难以记录。

我只有两个包选项prooftreetableau并且如果使用任一选项,则调用该环境。

如果两个选项都未使用,则由您决定默认设置。您可以默认为tableau这样可以避免冲突,但[prooftrees]如果现有用户不想更改文档,则让他们添加,或者将其默认为[prooftrees]除非该环境已经定义,在这种情况下,它默认为这样可以使仅加载一个包的常见情况像以前一样工作,然后[tableau]加载的情况可以避免冲突。bussproofsprooftrees

这会导致加载bussproofsprooftrees出现错误,但您只能通过延迟一切来开始文档来避免这种情况,所以我可能不会这样做,只是记录用户可能需要的选项tableau或更改包顺序。

答案2

在选项部分中,添加

\def\prooftree@name{prooftree}
\DeclareOption{altprooftree}{\def\prooftree@name{altprooftree}}

然后在最后一部分

\NewEnviron{\prooftree@name}[1]{%
  [...]
}

因此,想要使用的用户bussproofs可以加载

\usepackage[altprooftree]{prooftrees}

altprooftree并在文档中使用。

相关内容