有没有办法在参考书目部分指示/标记某些选定的参考文献。例如,我想在正文中使用简单的 natbib 引文(作者-年份)(因为它们是标准的)。但是在我的参考文献列表(参考书目)中,我想在主要名称前用星号标记一些参考文献(不是全部)。这是一个简短的例子,但如何添加星号?我是否需要为 @article 引入一个新字段(例如标记)并定义一个新的参考书目样式来解释新字段?
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{test,
author={Name},
journal={Journal},
title={TITLE},
year={2011},
}
\end{filecontents}
\documentclass{article}
\usepackage[authoryear]{natbib}
\bibliographystyle{apalike}
\begin{document}
\cite{test}
\bibliography{test}
\end{document}
答案1
这是一个与 BibTeX 和引文管理包配合使用的解决方案natbib
。不可否认,它相当笨拙。如果有人有更好的解决方案,请提出来。
解决方案由三部分组成。首先,在文件顶部添加以下几行.bib
:
@preamble{ " \newcommand{\noopsort}[1]{} "
# " \newcommand{\bibstar}{\textsuperscript{*}} " }
如果需要,修改 的定义,\bibstar
使其输出符合您的需要。该宏\noopsort
似乎什么也不做,但很快就会明白,它对于排序目的。
其次,对于参考文献部分中应该以“星号”为前缀的每个条目,请按如下方式修改(第一)作者的姓名:不要改为:
author = {Henry Jones},
写
author = {Henry \noopsort{Jones}\bibstar{}Jones},
该指令\noopsort{Jones}
确保条目将排在“Jones”的“J”下,而不是 BibTeX 决定的“ ”的排序顺序*
(可能在“Z”之后)。
第三,对于每个带星号的条目,使用 提供的机制定义一个“引用别名” natbib
。例如,如果 Henry Jones 的作品条目有 键jones11
,则应编写
\defcitealias{jones11}{Jones (2011)}
在序言中(natbib
包加载之后)。
有了这三点,就可以使用\citetalias
而不是\citet
引用相关条目,即写\citetalias{jones11}
。(如果你使用\citet
你会得到,惊喜,*Jones (2011)
......)
完整示例:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@preamble{ " \newcommand{\noop}[1]{} "
# " \newcommand{\bibstar}{\textsuperscript{*}} " }
@article{jones11,
author={Henry \noop{Jones}\bibstar{}Jones},
journal={Circularity Today},
title={Deep thoughts},
year={2011},
volume = 1,
issue = 1,
pages = "1-101",
}
\end{filecontents*}
\documentclass{article}
\usepackage[authoryear]{natbib}
\bibliographystyle{apalike}
\defcitealias{jones11}{Jones (2011)}
\begin{document}
\citetalias{jones11}
\bibliography{\jobname}
\end{document}
答案2
我使用的方法如下:我创建一个名为 的 sty 文件citestar.sty
,修改\cite
和的定义\bibitem
。然后当引用需要用星号强调的参考文献时,我将其引用为\cite{key1, key2*, key3}
。 的条目key2
将被强调。 的内容citestar.sty
如下:
% Modify the behavior of \cite and \bibitem commands such that when a
% key is followed by an astarisk (star *), the bibliography entry will have a
% star on the left margin. Example: \cite{key1,key2*,key3}. This will show
% key2 entry with a star on the margin.
%
% \usepackage{citestar}
% \begin{document}
% \cite{key1,key2*,key3}
% \begin{thebibliography}{99}
% \bibitem{key1} First reference.
% \bibitem{key2} Second reference.
% \bibitem{key3} Third reference.
% \end{thebibliography}
% \end{document}
% remove spaces from a string
\def\removeSpaces#1{\expandafter\removeSpacesA#1\relax}
\def\removeSpacesA#1{%
\ifx\relax#1\else%
\ifx#1\ \else#1\fi%
\expandafter\removeSpacesA%
\fi}
% process a single bib key, check if it ends with *. If so, remembers it.
% Then, strip the *, and put the stripped key back to the list \keysWithoutAster
\newcommand{\processSingleKey}[1]{%
\expandafter\@checkAsterisk#1*\@nil%
}
\def\@checkAsterisk#1*#2\@nil{%
\addToCommaSeparatedList{\keysWithoutAster}{#1}%
\ifx\relax#2\relax% does not end with *
\else% ends with *
\expandafter\gdef\csname key@\removeSpaces{#1}\endcsname{}%
\fi%
}
% Define a macro to add a string to a comma-separated list
\newcommand{\addToCommaSeparatedList}[2]{%
\edef#1{%
\ifx#1\empty\else#1,\fi % Add comma if the list is not empty
#2% Append the new string
}%
}
% Define a loop macro for comma-separated lists
\newcommand{\foreachcsv}[2]{%
\@for\tmp:=#1\do{#2{\tmp}}%
}
% Redefine \cite to remember keys with asterisks.
\let\oldcite\cite
\renewcommand{\cite}[1]{%
\def\keysWithoutAster{}% Clear oldkeys
\foreachcsv{#1}{\processSingleKey}%
\expandafter\oldcite\expandafter{\keysWithoutAster}%
}%
% Redefine \bibitem to add an asterisk to labels of remembered keys
\let\oldbibitem\bibitem
\renewcommand{\bibitem}[1]{%
\ifcsname key@\removeSpaces{#1}\endcsname%
\oldbibitem{#1}%
\makebox[0pt][r]{\bfseries*\hspace*{2em}}%
\hspace*{-7.3pt}
\else%
\oldbibitem{#1}%
\fi%
}
我确信代码可以改进。特别是星号的放置方式。我不知道如何将其放置在左侧而不影响后面的间距。所以我添加了临时空间-7.3pt
,这似乎有效。