latex修改参考文献颜色 Undefined control sequence. {}{\fail}

深夜记录一下,这个问题实在坑我太久。

先说标题中的问题的解决办法,注释掉\usepackage{bookmark},或者\usepackage{hyperref}。这两个包都是和超链接跳转有关的包,实测会导致标题中的bug,注释掉即可消除bug。其他和超链接跳转有关的包或许也许也会导致该问题,需谨慎添加。

下面我按时间顺序把来龙去脉梳理一下。

爱思唯尔模板

我的第一篇论文投在了爱思唯尔期刊,用的是官方的latex模板。和万千网友一样,修改稿件时,有了给参考文献上色的需求。

我很快找到了一篇博文(简称博文1),把里面的程序复制下来,稍微折腾一下便可用了(博文1的评论区还有我的留言)。博文1的代码也顺带给出如下。这里有一个我不知原理的bug:代码行与行之间不能有空行,否则报错。这一问题博主在评论区也有指出,从出现bug到解决bug并没有耗费我太多时间。

\makeatletter
\def\changeBibColor#1{%
\in@{#1}{jiang2022robust}% list of colored bib items
\ifin@\color{red}\else\normalcolor\fi
}
\xpatchcmd\@bibitem
{\item}
{\changeBibColor{#1}\item}
{}{\fail}
\xpatchcmd\@lbibitem
{\item}
{\changeBibColor{#2}\item}
{}{\fail}
\makeatother

IEEE模板

第二篇论文投IEEE,最近同样需要返修,给新增的参考文献上色。起初我信心满满地照搬上面的代码然后运行,结果报错Undefined control sequence. {}{\fail}。这个问题并不是我一个人碰到,千千万万网友都碰到了。

我很懵,百思不得其解。咋爱思唯尔可以,IEEE就不可以了?略去中间无数曲折,最终为我带来转机的是某博主的一篇博文(简称博文2)。

我首先把其中的核心代码直接复制到我的论文中,结果还是报同样的错Undefined control sequence. {}{\fail}。但博文2写得有理有据,娓娓道来,实在不像是瞎写的。于是我直接新建了一个test.tex文件,把博文2的完整代码复制进去,结果居然是可以顺利运行的,没有报Undefined control sequence. {}{\fail},结果也是理想的结果,参考文献成功上色!

奇了怪了!这说明latex是可以识别出{\fail}这个玩意儿的呀。那我的文件和test.tex到底差在哪儿呢?

我试图找出问题所在。略去中间无数曲折,最终我把我自己文章的tex文件\begin{document}之前的部分全都复制到test.tex文件的开头,一运行,又出现了Undefined control sequence. {}{\fail}。这不就意味着是我导入的某个包导致了这个error嘛!包这玩意儿也不是多多益善啊,太容易冲突了。于是我开始挨个注释导包语句,每注释一个包run一下,直到注释了\usepackage{bookmark},顺利运行。至此,真相大白。并且注释掉\usepackage{bookmark}后,博文1的方法也可以顺利运行,不报错了。

但是我又发现在IEEE的模板下,博文1的方法始终会让我的参考文献里的第一篇文献上色,即使我并没有指定该文献上色。具体原因我已经不想深究了,因为采用博文2的方法就不会有这个奇怪的问题。如果是爱思唯尔的模板,博文1的方法是不会有这个奇怪的问题的,并且更加简洁。

所以,总结来看:IEEE模板,采用博文2方法;爱思唯尔模板,博文1、2方法均可,推荐博文1方法,因为更加简洁。

另外,bookmark这个包其实挺好用的,可以实现文中超链接(包括公式、图表、引文)的跳转。但没办法呀…只能暂时被舍弃了。

顺便把博文2的代码再贴一遍,再次感谢!代码把本应放在bib文件里的参考文献tex主程序合并起来了,便于读者复制测试。

\begin{filecontents}[force]{bibtex.bib}
@inproceedings{ren2015faster,
  title={Faster r-cnn: Towards real-time object detection with region proposal networks},
  author={Ren, Shaoqing and He, Kaiming and Girshick, Ross and Sun, Jian},
  booktitle={Advances in neural information processing systems},
  pages={91--99},
  year={2015}
}

@inproceedings{girshick2015fast,
  title={Fast r-cnn},
  author={Girshick, Ross},
  booktitle={Proceedings of the IEEE international conference on computer vision},
  pages={1440--1448},
  year={2015}
}

@inproceedings{sharif2014cnn,
  title={CNN features off-the-shelf: an astounding baseline for recognition},
  author={Sharif Razavian, Ali and Azizpour, Hossein and Sullivan, Josephine and Carlsson, Stefan},
  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition workshops},
  pages={806--813},
  year={2014}
}

@misc{misc,
  author       = {X Peter Isley}, 
  title        = {The title of the work},
  howpublished = {How it was published},
  month        = 7,
  year         = 1993,
  note         = {An optional note}
}
\end{filecontents}

\documentclass{article}
\usepackage{xcolor}
\usepackage{xpatch}

\makeatletter
\ExplSyntaxOn
% #1 = color
% #2 = list of bib items
\cs_new:Npn \bibColoredItems #1#2
  {
    \clist_map_inline:nn {#2} { \cs_new:cpn {bib@colored@##1} {#1} } 
  }
\ExplSyntaxOff

% #1 = one bib item
\newcommand\bib@setcolor[1]{%
  \ifcsname bib@colored@#1\endcsname
    \expandafter\color\expandafter{\csname bib@colored@#1\endcsname}
  \else
    \normalcolor
  \fi
}

\xpatchcmd\@bibitem
  {\item}
  {\bib@setcolor{#1}\item}
  {}{\fail}

\xpatchcmd\@lbibitem
  {\item}
  {\bib@setcolor{#2}\item}
  {}{\fail}
\makeatother

\begin{document}
\nocite{*}
\bibliographystyle{plain}
\bibColoredItems{red}{misc, sharif2014cnn}
\bibColoredItems{blue}{ren2015faster}
aaa

\bibliography{bibtex}
bbb
\end{document}

总结

IEEE的模板估计太久没更新了,所以兼容性上的问题比较多。

作为一个网络小透明,实在没想到自己CSDN的粉丝有一天会涨至145之多。已经发布的博文大多是我自己日常学习工作过程中的一些简单总结,我也很高兴这些博文能为大家带来些许帮助。

很久没更新了。一方面是我变懒了;另一方面是想好好写一篇博文耗时并不短,所以我多次提笔于键盘,却封笔于草稿箱;以及,我也快迎来博士生涯最后一年了,心态和当初做本科毕设时候已经大不一样了。4年了,有多少长进呢?

最后,祝愿所有作者都被审稿人温柔以待,祝愿大家的论文都能顺利录用,祝愿我自己的论文也能顺利录用啊啊啊啊啊!!!

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
LaTeX中,"Undefined control sequence"是一个常见的错误消息,它表示出现了非法命令。这个错误通常出现在你使用了一个未定义的命令或者忘记引入相应的宏包时。 为了解决这个问题,你可以尝试以下几个步骤: 1. 检查你是否正确地书写了命令。确保命令的拼写和大小写都是正确的。 2. 确认你是否引入了相关的宏包。有些命令可能需要特定的宏包支持才能正常工作。你可以在导言区使用\usepackage命令引入所需的宏包。 3. 删除生成的辅助文件。在编译过程中,LaTeX会生成一些辅助文件,比如.aux文件和.bll文件。你可以尝试删除与出现错误消息相关的文件,然后重新编译一次。 4. 如果上述步骤仍然不能解决问题,那么可能是因为你忘记引入某个宏包。你可以尝试在导言区添加\usepackage{}命令,并在大括号内填写可能需要的宏包名称。 总之,当在LaTeX中遇到"Undefined control sequence"错误时,你应该检查命令的拼写、是否引入了相关的宏包,并尝试删除生成的辅助文件。如果问题仍然存在,可以尝试引入可能需要的宏包。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[翻译] [LaTeX] Undefined control sequence](https://blog.csdn.net/xovee/article/details/106567282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [latex出现“Undefined control sequence”问题解决方法](https://blog.csdn.net/weixin_44442186/article/details/126484660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值