我在 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
作为子字符串,因此它们将被加星标。