我试图使用 EMNLP 2019 会议的 LaTeX 文件(可以找到下载链接这里),但是当我尝试编译提供的示例.tex
文件时,它不起作用,并且我收到文件以下错误emnlp-ijcnlp-2019.sty
:
Line 455: patch failed ...x}{}{\errmessage{\noexpand patch failed}}
有趣的是,Overleaf 模板使用相同的.sty
文件就可以了,所以我认为这不是文件的问题.sty
,而是我的本地环境的问题。
如果这相关的话,我pdflatex
在 Windows 10 上使用。
什么可能导致出现此错误信息?我该如何修复它?是否可以在不更改.sty
文件的情况下修复此问题?
到目前为止我已经尝试过:
我查了一下相应的行(以及上面的两行),内容如下:
% DK/IV: Workaround for annoying hyperref pagewrap bug
\RequirePackage{etoolbox}
\patchcmd\@combinedblfloats{\box\@outputbox}{\unvbox\@outputbox}{}{\errmessage{\noexpand patch failed}}
快速搜索显示此评论上面的几行似乎就是从这里摘取的。
我已经etoolbox
安装了该软件包,并且还尝试了以下 MWE 而不是示例.tex
文件,但出现了相同的错误:
\documentclass[11pt,a4paper]{article}
\usepackage[hyperref]{emnlp-ijcnlp-2019}
\begin{document}
...
\end{document}
不幸的是,我无法提供该文件的 MWE,.sty
因为我不太了解其内容。
答案1
在您的本地软件包副本中,只需删除以下行
\patchcmd\@combinedblfloats{\box\@outputbox}{\unvbox\@outputbox}{}{\errmessage{\noexpand patch failed}}
您将获得预期的结果,因为 2018 年乳胶版本原始源已经有了,\unvbox
所以\patchcmd
找不到\box
要替换的。
LaTeX 来源记录了这一变化:
% \changes{v1.4d}{2018/11/28}{Unbox \cs{@outputbox} to preserve boxing
在评论中您提到您不允许更改包,但是该规则是为了确保您不会通过编辑文件来更改文档设计而编写的.sty
。
会议规则并不期望 latex 会更改并破坏其文件。代码根本无法与当前的 latex 配合使用,因此请更改您的副本:它将在新的 latex 上以相同的方式工作,就像未更改的带有补丁的文件将在旧 latex 上工作一样。
因此,您仍然可以提交您的文章,他们不需要“知道”您更改了包的本地副本,尽管您可以参考此答案向他们报告。
答案2
由于我没有 Overleaf 帐户,请进行以下测试:
将该行\listfiles
作为第一行添加到文件emnlp2019.tex
:
%
% File emnlp2019.tex
%
%% Based on the style files for ACL 2019, which were
%% Based on the style files for EMNLP 2018, which were
%% Based on the style files for ACL 2018, which were
%% Based on the style files for ACL-2015, with some improvements
%% taken from the NAACL-2016 style
%% Based on the style files for ACL-2014, which were, in turn,
%% based on ACL-2013, ACL-2012, ACL-2011, ACL-2010, ACL-IJCNLP-2009,
%% EACL-2009, IJCNLP-2008...
%% Based on the style files for EACL 2006 by
%%[email protected] or [email protected]
%% and that of ACL 08 by Joakim Nivre and Noah Smith
\listfiles % <====================================================
\documentclass[11pt,a4paper]{article}
\usepackage[hyperref]{emnlp-ijcnlp-2019}
\usepackage{times}
\usepackage{latexsym}
...
现在在 Overleaf 上编译三次,并emnlp2019.log
在最后检查生成的日志文件以获取所用软件包和版本的列表。我确信您会找到hyperref
列出的旧版本...
请将此列表添加到您的问题中。
emnlp2019.tex
然后在您的计算机上编译添加的相同文件\listfile
。再次检查生成的日志文件并搜索使用的版本hyperref
。我确信它更新...
请将使用的软件包和版本列表也添加到您的问题中!
我猜测的原因是所用sty
文件中的以下代码:
% DK/IV: Workaround for annoying hyperref pagewrap bug
\RequirePackage{etoolbox}
\patchcmd\@combinedblfloats{\box\@outputbox}{\unvbox\@outputbox}{}{\errmessage{\noexpand patch failed}}
正如您在上面的评论中看到的,\patchcmd
旧版本中有一个错误hyperref
(哪个版本没有命名,这真的很有帮助!)。使用的补丁想要纠正,但在您当前的计算机系统上,补丁失败了,因为
\@combinedblfloats
找不到命令或\box\@outputbox
找不到命令,请将其更改为\unvbox\@outputbox
要进行快速测试,请执行以下操作:
- 创建一个新目录。
- 将给定链接中的 zip 文件的所有文件复制到该目录中。
- 添加
\listfiles
到模板Tex文件emnlp2019.tex
- 对文件中上面显示的行进行注释
emnlp-ijcnlp-2019.sty
,并 - 重新编译文件
emnlp2019.tex
错误消失了?好的,该补丁似乎不再需要了。
错误仍然存在?联系 zip 文件的维护者并报告您发现的错误。