通过修改引文标记突出显示所选引文

通过修改引文标记突出显示所选引文

在文档中,我想用特殊的引用标记来表示某些引用,例如在引用编号后添加星号。我正在使用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}

这使

在此处输入图片描述

这很接近我想要的,但至少存在两个问题:

  1. 我必须手动将 .bbl 中的特殊引用转换\bibitem\mybibitem,这并不理想,但目前可行。
  2. 特殊引文 (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:配置我的编辑器以避免未定义的引用也许值得一读。

一般来说,.bibBibTeX 文件也可以用于biblatex,但biblatex可以使用大多数 BibTeX 样式所没有的某些字段(请记住:文件.bst最终决定支持哪些字段以及它们的具体含义,尽管.bst文件之间对于许多常见字段达成了广泛的共识,但您也不能总是确保所有样式都能从您的数据中得出完全相同的结果)。

biblatex的标准样式与/numeric并不完全相同。unsrturlunsrtbiblatex-trad'strad-unsrt可能更接近匹配。但是如果你对style=numeric给出的一般输出没有异议(进行一些简单的修改),自定义 biblatex 样式的指南)我不会为之烦恼biblatex-trad,也不会坚持使用style=numeric。(作为的当前维护者,我想我可以这么说biblatex-trad。)


这是一个 BibTeX 解决方案。它需要破解.bst文件以及摆弄 的内部宏thebibliography

要破解.bst文件,你可以unsrturl-specialhttps://gist.github.com/moewew/727b429da91f9453639c0ec2fbdc17c2(您也可以在其中找到与未修改版本的差异unsrturl.bst)或按照以下步骤操作

  1. unsrturl.bst例如,通过键入以下内容在您的机器上找到kpsewhich unsrturl.bst,否则从以下位置下载http://mirrors.ctan.org/biblio/bibtex/contrib/urlbst/unsrturl.bst
  2. 将文件复制到 LaTeX 可以找到它的地方(https://texfaq.org/FAQ-inst-wlcf)您的文档的目录就可以了,并且改名将其改为,例如。请注意,所基于的unsrturl-special.bst许可证要求您在修改文件时更改其名称。unsrt.bstunsrturl.bst
  3. 打开unsrturl-special.bst并插入带有新文件名和当前日期的标题
  4. 添加special到已知字段列表ENTRY(大约第 55 行)
  5. 全部替换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$是新的。

  6. 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$是新的。

  7. 保存文件。

不同之处在于

--- 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,然后

  1. 添加条目“特殊”

    ENTRY
      { address
        ...
        special
      }
    
  2. "\bibitem{" write$替换FUNCTION 中的行{output.bibitem}

    FUNCTION {output.bibitem}
        { newline$
          special empty$ 
            { "\bibitem{" write$ }
            { "\specialbibitem{" write$ } 
          if$
          cite$ write$
          "}" write$
          newline$
          ""
          before.all 'output.state :=
        }`
    

这使:

在此处输入图片描述

相关内容