... 这不会让我想拔掉我剩下的头发。
我正在准备一篇长篇期刊文章,其中包含大量必要的软件包以及特定于出版商的类文件。
在这个特定案例中,我最近添加了
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
当构建 TeX 文件时我遇到了一个典型的冲突错误:
("C:\Program Files\MiKTeX 2.9\tex\latex\algorithms\algorithm.sty"
Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating environment
! LaTeX Error: Command \c@algorithm already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.96 \floatname
{algorithm}{\ALG@name}
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.
生成的 PDF 看起来很好,包括新的算法,但由于我正在与其他方合作处理源代码 - 而且我是那种对不平衡括号感到噩梦的人 - 我不想提交引入错误消息的更改。
除了这个特定案例(我认为它非常特殊,但可以作为一个有用的例子)之外,我想知道是否有任何方法或有用的技巧来调试此类冲突?我曾尝试注释掉各种包,对有问题的包进行“二分搜索”,但随后我遇到了其他错误,或者由于省略了必要的包而导致构建失败。我曾尝试从 MWE 构建包,但考虑到文档的复杂性,这很耗时,而且(目前)没有产生任何见解。
这让我想知道是否有更好的方法......TeX 专家将如何解决这个问题?
例如,pdfTex .log 文件中是否有任何提示表明\c@algorithm
已定义的位置?是否有其他方法可以追踪定义的位置?也许可以在包含包之前重命名定义algorithm
?也许有一个在线资源提供了典型包冲突矩阵?或者也许还有其他通用方法来识别和解决此类冲突?
(当然,还有很多不兼容问题已经在这个网站上,但我找不到任何关于如何确认冲突/不兼容。
编辑:感谢下面的评论和 David 的帮助,我能够修复这个具体案例,它与elsart
我正在使用的类文件和algorithm
我包含的用于定义算法计数器的包有关。识别此冲突的方法是按照 David 的建议查看日志文件以找到计数器的\c@algorithm
注册位置。为了解决这个问题,我\makeatletter\let\c@algorithm\relax\makeatother
在包含包之前添加了algorithm
。
关于识别和解决冲突的通用方法(例如查看日志文件中的嵌套文件包含内容)的问题仍然悬而未决。
答案1
您可以通过在日志文件中查找以下行来找到寄存器\c@algorithm
的定义位置
\c@algorithm=\count??
然后通过逆向查找日志文件匹配(
并)
标记 TeX 文件读取系统打开和关闭文件的位置来确定当时正在读取哪个包文件。每个打开的文件的完整路径显示在后面,到达文件末尾时,将(
a打印到日志中。)