定制个别书目标签?

定制个别书目标签?

我在 LaTeX 和 BibTeX 中使用标准article类和 bib 样式unsrt。我想自定义参考文献列表中的个别 biblabel,例如按如下方式为某些项目加注星号:

[1] A.乌托尔……

*[2] B.乌索尔……

[3] C.乌托尔......

标签应右对齐,以便标有星号的标签突出。感谢这个论坛,我知道如何自定义所有标签:

\makeatletter

\renewcommand\@biblabel[1]{\mbox{$\star \left[ \right.$}#1\mbox{$\left. \right]$}}

\makeatother

但是我如何才能只定制特定的标签?基于 BibTeX 标签的解决方案是首选,但也会考虑其他解决方案。

答案1

这主要取决于您如何决定哪些条目必须加星标。我假设您可以通过键的子字符串来决定。

\begin{filecontents*}{\jobname.bib}
@article{gander2001,
 author={Gladstone Gander},
 title={How to be lucky},
 journal={Nature},
 pages={1-33},
 volume={42},
 year={2001},
}
@article{ducks2002,
 author={Donald Duck and Fethry Duck},
 title={How to be unlucky},
 journal={Nature},
 pages={34-44},
 volume={43},
 year={2002},
}
@book{scrooge1901,
 author={Scrooge McDuck},
 title={My first golden nugget in {Klondike}},
 publisher={Yukon Press},
 address={Whitehorse},
 year={1901},
}
@book{scrooge1990,
 author={Scrooge McDuck},
 title={How to manage zillion of dollars},
 publisher={McDuck Press},
 address={Duckburg},
 year={1990},
}
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\setspeciallist}{ m }
 {
  \seq_gset_split:Nnn \g_mmakster_special_list_seq { , } { #1 }
 }

\cs_set_eq:Nc \mmakster_original_bibitem:n { @bibitem }

\seq_new:N \g_mmakster_special_list_seq
\bool_new:N \l_mmakster_star_bool
\cs_set_protected:cpn { @bibitem } #1
 {
  \bool_set_false:N \l_mmakster_star_bool
  \seq_map_inline:Nn \g_mmakster_special_list_seq
   {
    \tl_if_in:nnT { #1 } { ##1 } 
     { \bool_set_true:N \l_mmakster_star_bool \seq_map_break: }
   }
  \mmakster_original_bibitem:n { #1 }
 }
\cs_set_protected:cpn { @biblabel } #1
 {
  \bool_if:NT \l_mmakster_star_bool { \leavevmode\llap{*} }[#1]
 }
\ExplSyntaxOff

\setspeciallist{gander,duck}

\begin{document}
\nocite{*}

\bibliographystyle{unsrt}
\bibliography{\jobname}

\end{document}

这样,两个条目“Gander”和“Duck and Duck”就有一个键,该键包含其中一个字符串\setspeciallist作为子字符串,因此它们将被加星标。

在此处输入图片描述

相关内容