在文档中,我想用特殊的引用标记来表示某些引用,例如在引用编号后添加星号。我正在使用article
文档类和unsrturl
参考书目样式,以及cite
使用选项的包superscript
。理想情况下,我还希望能够在参考书目部分的开头添加注释,描述星号的含义。我正在使用 bibtex 来构建参考书目。
这就是我想要实现的目标:
特殊引用是通过 .bib 文件中的条目还是使用该命令的特殊版本来标记并不重要\cite
。
这个问题似乎包含针对此问题的解决方案,但似乎特定于参考书目样式。我也不知道使用该cite
包是否需要不同的解决方案。
我的乳胶文件具有以下一般结构:
\documentclass{article}
\usepackage[superscript,biblabel]{cite}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{citation1, TITLE = {A regular citation}}
@article{citation2, TITLE = {A special citation}}
\end{filecontents}
\begin{document}
In the main text there is a citation~\cite{citation1} and a special citation~\cite{citation2}.
\bibliographystyle{unsrturl}
\bibliography{\jobname}
\end{document}
这使
我接下来要去哪里?
更新
作为一个丑陋的解决方法,我想出了以下(部分)解决方案:我定义了一个特殊的\bibitem
命令来替换标签(灵感来自这答案)并重新定义\refname
以挤压下面的额外文本行参考标题:
\documentclass{article}
\usepackage[superscript,biblabel]{cite}
\newcommand{\mybibitem}[1]{\stepcounter{enumiv} \bibitem[{\arabic{enumiv}*}]{#1}}
\renewcommand{\refname}{References
\noindent{\normalsize\rmfamily\mdseries {Note: Special citations are marked with an asterisk.}}
}
\begin{document}
In the main text there is a citation~\cite{citation1} and a special citation~\cite{citation2}.
\begin{thebibliography}{999}
\bibitem{citation1} A regular citation.
\mybibitem{citation2} A special citation.
\end{thebibliography}
\end{document}
这使
这很接近我想要的,但至少存在两个问题:
- 我必须手动将 .bbl 中的特殊引用转换
\bibitem
为\mybibitem
,这并不理想,但目前可行。 - 特殊引文 (2*) 的标签似乎是左对齐的,而不是右对齐的,这对我来说不起作用,因为我的参考文献列表很长,因此为标签保留了相当宽的列。我尝试使用右对齐标签,
\hfill
但没有成功。有人对如何修复这些标签的对齐方式有什么建议吗?
答案1
这biblatex
相当简单。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{citation1, TITLE = {A regular citation}}
@article{citation2, TITLE = {A special citation}, keywords={special}}
\end{filecontents}
\usepackage[backend=biber, style=numeric, autocite=superscript, sorting=none]{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{labelnumber}{%
#1%
\ifkeyword{special}{*}{}%
}
\defbibnote{astnote}{Special citations are marked with an asterisk.}
\begin{document}
In the main text there is a citation~\autocite{citation1} and a special citation~\autocite{citation2}.
\printbibliography[prenote=astnote]
\end{document}
special
在此示例中,文件中使用关键字标记特殊条目.bib
。如果您喜欢更动态的方法,则可以使用类别。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{citation1, TITLE = {A regular citation}}
@article{citation2, TITLE = {A special citation}}
\end{filecontents}
\usepackage[backend=biber, style=numeric, autocite=superscript, sorting=none]{biblatex}
\addbibresource{\jobname.bib}
\DeclareBibliographyCategory{special}
\DeclareFieldFormat{labelnumber}{%
#1%
\ifcategory{special}{*}{}%
}
\addtocategory{special}{citation2}
\defbibnote{astnote}{Special citations are marked with an asterisk.}
\begin{document}
In the main text there is a citation~\autocite{citation1} and a special citation~\autocite{citation2}.
\printbibliography[prenote=astnote]
\end{document}
当然,你可以将两者结合起来
\DeclareFieldFormat{labelnumber}{%
#1%
\ifboolexpr{test {\ifkeyword{special}}
or test {\ifcategory{special}}}
{*}{}%
}
也可以使用特殊的引用命令,但我强烈推荐这里展示的两种方法。引用时,您不必担心参考文献是否特殊。
由于biblatex
与基于 BibTeX 的参考书目和引文管理不同,因此会存在一些差异。请查看bibtex 与 biber 以及 biblatex 与 natbib 的比较和要切换到 biblatex 该怎么做?比较系统和切换到的一般建议biblatex
。您还需要使用 Biber,因此Biblatex 与 Biber:配置我的编辑器以避免未定义的引用也许值得一读。
一般来说,.bib
BibTeX 文件也可以用于biblatex
,但biblatex
可以使用大多数 BibTeX 样式所没有的某些字段(请记住:文件.bst
最终决定支持哪些字段以及它们的具体含义,尽管.bst
文件之间对于许多常见字段达成了广泛的共识,但您也不能总是确保所有样式都能从您的数据中得出完全相同的结果)。
biblatex
的标准样式与/numeric
并不完全相同。unsrturl
unsrt
biblatex-trad
'strad-unsrt
可能更接近匹配。但是如果你对style=numeric
给出的一般输出没有异议(进行一些简单的修改),自定义 biblatex 样式的指南)我不会为之烦恼biblatex-trad
,也不会坚持使用style=numeric
。(作为的当前维护者,我想我可以这么说biblatex-trad
。)
这是一个 BibTeX 解决方案。它需要破解.bst
文件以及摆弄 的内部宏thebibliography
。
要破解.bst
文件,你可以unsrturl-special
从https://gist.github.com/moewew/727b429da91f9453639c0ec2fbdc17c2(您也可以在其中找到与未修改版本的差异unsrturl.bst
)或按照以下步骤操作
unsrturl.bst
例如,通过键入以下内容在您的机器上找到kpsewhich unsrturl.bst
,否则从以下位置下载http://mirrors.ctan.org/biblio/bibtex/contrib/urlbst/unsrturl.bst- 将文件复制到 LaTeX 可以找到它的地方(https://texfaq.org/FAQ-inst-wlcf)您的文档的目录就可以了,并且改名将其改为,例如。请注意,所基于的
unsrturl-special.bst
许可证要求您在修改文件时更改其名称。unsrt.bst
unsrturl.bst
- 打开
unsrturl-special.bst
并插入带有新文件名和当前日期的标题 - 添加
special
到已知字段列表ENTRY
(大约第 55 行) 全部替换
FUNCTION {output.bibitem.original}
为FUNCTION {output.bibitem.original} % urlbst (renamed from output.bibitem, so it can be wrapped below) { newline$ "\bibitem" write$ special empty$ 'skip$ { "[" special * "]" * write$ } if$ "{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := }
special empty$
从到开始的区块if$
是新的。FUNCTION {longest.label.pass}
用。。。来代替FUNCTION {longest.label.pass} { number.label int.to.str$ special empty$ 'skip$ { special * } if$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ }
special empty$
从到开始的区块if$
是新的。保存文件。
不同之处在于
--- unsrturl.bst 2011-07-20 12:00:29.000000000 +0200
+++ unsrturl-special.bst 2018-07-10 09:21:13.297153700 +0200
@@ -1,3 +1,10 @@
+%%%%% unsrturl-special (2018-07-10)
+%%%%% unsrturl with support for marking special entries with an arbitrary
+%%%%% marker
+%%%%% The marker is given verbatim in the `special' field
+%%%%%
+%%%%% Original copyright notices follow
+
%%% Modification of BibTeX style file /usr/local/texlive/2009/texmf-dist/bibtex/bst/base/unsrt.bst
%%% ... by urlbst, version 0.7 (marked with "% urlbst")
%%% See <http://purl.org/nxg/dist/urlbst>
@@ -46,6 +53,7 @@
pubmed % urlbst
url % urlbst
lastchecked % urlbst
+ special
}
{}
{ label }
@@ -251,7 +259,12 @@
FUNCTION {output.bibitem.original} % urlbst (renamed from output.bibitem, so it can be wrapped below)
{ newline$
- "\bibitem{" write$
+ "\bibitem" write$
+ special empty$
+ 'skip$
+ { "[" special * "]" * write$ }
+ if$
+ "{" write$
cite$ write$
"}" write$
newline$
@@ -1270,7 +1283,12 @@
}
FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
+{ number.label int.to.str$
+ special empty$
+ 'skip$
+ { special * }
+ if$
+ 'label :=
number.label #1 + 'number.label :=
label width$ longest.label.width >
{ label 'longest.label :=
在您的文档中,您现在使用unsrturl-special
而不是unsrturl
修改内部宏,\bibitem
如下所示
\documentclass{article}
\usepackage[superscript,biblabel]{cite}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{citation1, TITLE = {A regular citation}}
@article{citation2, TITLE = {A special citation}, special={*}}
\end{filecontents}
\makeatletter
\let\@olbibitem\@lbibitem
\def\@lbibitem[#1]#2{%
\stepcounter{\@listctr}%
\@olbibitem[\the\value{\@listctr}#1]{#2}}
\makeatother
\begin{document}
In the main text there is a citation~\cite{citation1} and a special citation~\cite{citation2}.
\bibliographystyle{unsrturl-special}
\bibliography{\jobname}
\end{document}
special = {*}
这要求您为每个要突出显示的 bib 条目添加星号。当然,您也可以在那里使用其他特殊符号。
答案2
不确定是否有任何帮助,但从您在更新问题时采用的解决方法开始,我设法通过在 bib 文件中添加条目并修改 bst 文件来自动更改 bbl 文件。
这是您修改后的示例:
\documentclass{article}
\usepackage[superscript,biblabel]{cite}
\newcommand{\specialbibitem}[1]{\stepcounter{enumiv} \bibitem[{\arabic{enumiv}*}]{#1}}
\renewcommand{\refname}{References
\noindent{\normalsize\rmfamily\mdseries {Note: Special citations are marked with an asterisk.}}
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{citation1, TITLE = {A regular citation}}
@article{citation2, TITLE = {A special citation}, special = {*}}
\end{filecontents}
\begin{document}
In the main text there is a citation~\cite{citation1} and a special citation~\cite{citation2}.
\bibliographystyle{plain-special}
\bibliography{\jobname.bib}
\end{document}
然后将 plain.bst 文件复制并重命名为 plain-special.bst,然后
添加条目“特殊”
ENTRY { address ... special }
"\bibitem{" write$
替换FUNCTION 中的行{output.bibitem}FUNCTION {output.bibitem} { newline$ special empty$ { "\bibitem{" write$ } { "\specialbibitem{" write$ } if$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := }`
这使: