使用biblatex时如何改变指定参考文献的颜色

1. 引言

使用颜色来显式的指出的特定参考文献(比如指出修改或增加的参考文献)是一个需求,使用bibtex和thebibliography环境情况的处理方法,慕子 已经给出了解决方案,其思路主要是:patch \bibitem命令,使其在输出参考文献表时,根据对应指定参考文献是否由entrykey定义了一个标记命令(或称控制序列),来判断当前输出的文献是否需要改变颜色。这种方法适用于使用latex本身提供的参考文献机制的情况(如thebibliography和bibtex的方法)。

然而 biblatex 作为一套替代性的完整解决方案,不在使用latex提供的参考文献机制,因此上述方法是无法生效的,另外修改bbl文件的方式也无法生效,因为biblatex的bbl文件是特殊的格式,并不是一个thebibliography环境。所以还是有必要提供一个biblatex的解决方法。

2. 思路

要使得参考文献表输出时将指定的参考文献加上特定的颜色,那么基本思路是是清楚的:
在输出每条参考文献时做判断,若当前的文献是我们需要添加颜色的文献,那么就做相应的处理,否则就跳过。

要实现这个功能,如同慕子给出的方案对每个需要加颜色的文献定义一个命令作为标记,不加则不定义,那么只要判断是否存在相关命令就可以区分处理要加颜色的文献。另一种思路是利用list,将需要加颜色的文献标记在一个列表中,在输出时判断当前文献是否在列表中,那么就可以区分需要加颜色的文献。

这里我们使用第二种思路,我们可以自定义一个列表,然后在对\blx@bibitem做修改,在其中增加判断文献是否在列表中并添加颜色的逻辑。这种方式总是可以实现的,然而biblatex作为非常全面的参考文献包,已经提供了很多的机制来帮助用户定制,因此我们完全没有必要重新的实现一些小轮子(插件),不仅费时费力还可能破坏biblatex本身良好的逻辑,这个思路也是我写biblatex-gb7714-2015宏包的原则,尽可能的遵循biblatex自身的逻辑,做尽可能少的内部宏的重定义,这样会提供最大的兼容性。

所以我们使用category机制来实现(当然使用其它的type等等也是可以的,甚至基于单个的entrytype实现也是没有问题的)。首先将需要添加颜色的文献添加进一个category,然后在输出的时候做判断,若当前文献在该category中则添加颜色。这实质上是一种筛选机制,所以我前面说使用type等其它能够实现筛选的机制都是可以的。更多的筛选机制见biblatex.PDF,示例见:biblatex-solution-to-latex-bibliography.PDF.

3. 实现

具体来说,实现代码为:

\newcommand{\colorbibs}[2][blue]%
{%
\DeclareBibliographyCategory{ColoredBiblist#1}%
\addtocategory{ColoredBiblist#1}{#2}%
\AtEveryBibitem{\ifcategory{ColoredBiblist#1}{\color{#1}\bfseries}{}}
}

其中还多增加了一个选项用于设置颜色,所以我们可以使用自己想要的颜色,另外要突出显示也可以增加其他的格式,比如这里增加了粗体显示。需要注意的是这个命令的定义需要放在biblatex宏包加载之后。

使用方法为:

\colorbibs{DUBAR2013--,关立哲2014--}

那么文献 DUBAR2013--,关立哲2014-- 就会加上默认的蓝色和粗体。

结果如图所示:
指定两篇文献蓝色加粗

甚至我们可以实现多种不同颜色的强调,比如:

\colorbibs[red]{DUBAR2008--}
\colorbibs[green]{关立哲2005--}

那么文献DUBAR2008--,关立哲2005-- 就会分别加上红色和绿色。

结果如图所示:
多种颜色添加

4. 测试用例

测试的具体代码如下:

\documentclass[twoside]{article}
    \usepackage{ctex}
    \usepackage{fontspec}
\usepackage[backend=biber,style=gb7714-2015]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{DUBAR2013--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {Revealing nature's synthetic potential through the study of ribosomal natural product biosynthesis},
  Journaltitle = {ACS chemical biology},
  DATE         = {2013},
  VOLUME       = {8},
  pages        = {473-487},
  url          = {http://pubs.acs.org/doi/pdfplus/10.1021/cb3005325},
  urldate      = {2013-10-16}
}

@ARTICLE{DUBAR2008--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {A study on online pharmaceutical operating situation and supervision mechanism},
  Journaltitle = {Shanghai food and drug information research},
  DATE         = {2008},
  number       = {1},
  pages        = {8-11},
}

@ARTICLE{关立哲2014--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {科技期刊编辑审读中要注重比较思维的科学运用},
  Journaltitle = {编辑学报},
  DATE         = {2014},
  VOLUME       = {26},
  number       = {2},
  pages        = {144-146}
}

@ARTICLE{关立哲2005--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {从交易费用的角度谈如何构建药品流通的良性机制},
  Journaltitle = {中国物价},
  DATE         = {2005},
  number       = {8},
  pages        = {42-45},
}

\end{filecontents}

\addbibresource{\jobname.bib}

\usepackage[colorlinks=true,citecolor=magenta]{hyperref}

\newcommand{\colorbibs}[2][blue]%
{%
\DeclareBibliographyCategory{ColoredBiblist#1}%
\addtocategory{ColoredBiblist#1}{#2}%
\AtEveryBibitem{\ifcategory{ColoredBiblist#1}{\color{#1}\bfseries}{}}
}

\colorbibs{DUBAR2013--,关立哲2014--}
\colorbibs[red]{DUBAR2008--}
\colorbibs[green]{关立哲2005--}


\begin{document}

\nocite{*}
\printbibliography


\end{document} 

结果为:
在这里插入图片描述

用户可以测试一下不同样式下的使用情况,gb类的我已经测试过,其它的样式若有问题可以反馈给我。

需要注意的是,如果有更底层的颜色设置,那么是会覆盖当前的颜色设置的,当然通常这种定制的情况通常较少会和上述情况一起用。

比如:


\documentclass[twoside]{article}
    \usepackage{ctex}
    \usepackage{fontspec}
    \usepackage{xcolor}
\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}%,gbalign=gb7714-2015

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{DUBAR2013--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {Revealing nature's synthetic potential through the study of ribosomal natural product biosynthesis},
  Journaltitle = {ACS chemical biology},
  DATE         = {2013},
  VOLUME       = {8},
  pages        = {473-487},
  url          = {http://pubs.acs.org/doi/pdfplus/10.1021/cb3005325},
  urldate      = {2013-10-16}
}

@ARTICLE{DUBAR2008--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {A study on online pharmaceutical operating situation and supervision mechanism},
  Journaltitle = {Shanghai food and drug information research},
  DATE         = {2008},
  number       = {1},
  pages        = {8-11},
}

@ARTICLE{关立哲2014--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {科技期刊编辑审读中要注重比较思维的科学运用},
  Journaltitle = {编辑学报},
  DATE         = {2014},
  VOLUME       = {26},
  number       = {2},
  pages        = {144-146}
}

@ARTICLE{关立哲2005--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {从交易费用的角度谈如何构建药品流通的良性机制},
  Journaltitle = {中国物价},
  DATE         = {2005},
  number       = {8},
  pages        = {42-45},
}

\end{filecontents}

\addbibresource{\jobname.bib}

\usepackage[colorlinks=true,citecolor=magenta]{hyperref}

\newcommand{\colorbibs}[2][blue]%
{%
\DeclareBibliographyCategory{ColoredBiblist#1}%
\addtocategory{ColoredBiblist#1}{#2}%
\AtEveryBibitem{\ifcategory{ColoredBiblist#1}{\color{#1}\bfseries}{}}
}

\colorbibs{DUBAR2013--,关立哲2014--}
\colorbibs[red]{DUBAR2008--}
\colorbibs[green]{关立哲2005--}

\renewcommand{\bibauthorfont}{\color{teal}}%
\renewcommand{\bibtitlefont}{\color{blue}}%
\renewcommand{\bibpubfont}{\color{violet}}%

\begin{document}

\nocite{*}

\printbibliography

\end{document} 

结果为:

可能会被更低层的命令覆盖

当然更可以利用这种底层设置让指定文献只在文献条目的某些部分显示颜色,比如:


\documentclass[twoside]{article}
    \usepackage{ctex}
    \usepackage{fontspec}
    \usepackage{xcolor}
\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}%,gbalign=gb7714-2015

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{DUBAR2013--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {Revealing nature's synthetic potential through the study of ribosomal natural product biosynthesis},
  Journaltitle = {ACS chemical biology},
  DATE         = {2013},
  VOLUME       = {8},
  pages        = {473-487},
  url          = {http://pubs.acs.org/doi/pdfplus/10.1021/cb3005325},
  urldate      = {2013-10-16}
}

@ARTICLE{DUBAR2008--,
  author       = {DUBAR, K L.  AND MITCHELL, D A.},
  title        = {A study on online pharmaceutical operating situation and supervision mechanism},
  Journaltitle = {Shanghai food and drug information research},
  DATE         = {2008},
  number       = {1},
  pages        = {8-11},
}

@ARTICLE{关立哲2014--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {科技期刊编辑审读中要注重比较思维的科学运用},
  Journaltitle = {编辑学报},
  DATE         = {2014},
  VOLUME       = {26},
  number       = {2},
  pages        = {144-146}
}

@ARTICLE{关立哲2005--,
  author       = {关立哲 and 韩纪富 and 张晨延},
  title        = {从交易费用的角度谈如何构建药品流通的良性机制},
  Journaltitle = {中国物价},
  DATE         = {2005},
  number       = {8},
  pages        = {42-45},
}

\end{filecontents}

\addbibresource{\jobname.bib}

\usepackage[colorlinks=true,citecolor=magenta]{hyperref}

\newcommand{\colorbibs}[2][blue]%
{%
\DeclareBibliographyCategory{ColoredBiblist#1}%
\addtocategory{ColoredBiblist#1}{#2}%
\AtEveryBibitem{\ifcategory{ColoredBiblist#1}{%
\renewcommand{\bibtitlefont}{\color{#1}}%
\renewcommand{\bibpubfont}{\color{#1}}}{}}
}

\colorbibs{DUBAR2013--,关立哲2014--}
\colorbibs[red]{DUBAR2008--}
\colorbibs[green]{关立哲2005--}

\begin{document}

\nocite{*}

\printbibliography

\end{document} 

结果如图所示:
只对标题调整颜色

5. 小结

针对biblatex不同于传统参考文献方案导致的问题,实现了指定参考文献加颜色等突出显示功能,加颜色功能不限于整个条目,也可以针对条目内的部分内容加颜色处理,为biblatex用户解决了一个小的需求。

6. 参考文献

  1. [LaTeX 尝试] 改变指定参考文献条目的颜色

  2. latex 一次性改变多个参考文献的颜色

  3. biblatex.pdf

  4. biblatex-gb7714-2105.pdf

  5. biblatex-solution-to-latex-bibliography.PDF

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐