关闭参考书目的 \DeclareSourceMap

关闭参考书目的 \DeclareSourceMap

我想知道是否可以关闭\DeclareSourceMap部分 tex 文档的效果。有什么技巧可以做到这一点吗?


以下是有关我所处情况的更多信息。我正在尝试使用一种独特的引用风格,该风格基于biblatex

\usepackage[backend=biber,bibstyle=nature,citestyle=authoryear,maxcitenames=2,maxbibnames=99,uniquelist=false,sorting=ydnt]{biblatex}

我使用以下内容将期刊名称添加到authoryear引用样式中:

% add journal name to inline citation
\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
     \setunit{\addcomma\space}%
     \usebibmacro{journal}
     \setunit{\addcomma\space}%
     \usebibmacro{cite:labeldate+extradate}}%
    {\usebibmacro{cite:shorthand}}}

最后,我\DeclareSourceMap在文中使用了缩短期刊标题。结果正如我所期望的那样,参考文献显示为[DOE RSI 2006]在文中引用时。

但是,当我使用 在文档末尾实际打印参考书目时,我想关闭期刊标题的缩短\printbibliography。目前,我的参考书目如下所示:

Doe, AB 和 Smith, JS 一篇标题很酷的期刊文章。相对强弱指数 (RSI)(2006)。

我希望参考书目看起来像这样:

Doe, AB 和 Smith, JS 一篇标题很酷的期刊文章。科学仪器评论(2006)。

但我需要保留文本中的引用格式,如上所述。

\DeclareSourceMap有没有办法在通话前直接关闭效果\printbibliography

感谢您的帮助。


MWE 如下:

\documentclass{article}

\usepackage[backend=biber,bibstyle=nature,citestyle=authoryear,maxcitenames=2,maxbibnames=99,uniquelist=false,sorting=ydnt]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{mybibfile.bib}
    @article{file,
    author = {Doe, A. B. and Smith, J. S. and Author, G. B.},
    title = {A journal article with a cool title},
    journal = {Review of Scientific Instruments},
    year = {2006}
    }
\end{filecontents}

\addbibresource{mybibfile.bib}

% add journal name to inline citation
\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
      {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}}
      {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
     \setunit{\addcomma\space}%
     \usebibmacro{journal}
     \setunit{\addcomma\space}%
     \usebibmacro{cite:labeldate+extradate}}%
    {\usebibmacro{cite:shorthand}}}

% abbreviate journal names
\DeclareSourcemap{
 \maps[datatype=bibtex,overwrite=true]{
  \map{
    \step[fieldsource=journal,
          match=\regexp{Review\sof\sScientific\sInstruments},
          replace={RSI}]
  }
 }
}

\begin{document}

This works as intended: \parencite{file}

This does not work as intended: 
\printbibliography
\end{document}

答案1

biblatex提供字段shortjournal(标准样式不使用),因此您可以设置的值并在引用中shortjournal使用。这可以通过在定义中使用而不是来实现shortjournal\printfield{shortjournal}\usebibmacro{journal}\cite

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
      {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}}
      {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
     \setunit{\addcomma\space}%
     \printfield{shortjournal} % changed line
     \setunit{\addcomma\space}%
     \usebibmacro{cite:labeldate+extradate}}%
    {\usebibmacro{cite:shorthand}}}

\DeclareSourceMap 增加了价值shortjournal

\DeclareSourcemap{
 \maps[datatype=bibtex,overwrite=true]{
  \map{
    \step[fieldsource=journal,
          match=\regexp{Review\sof\sScientific\sInstruments},
          fieldset=shortjournal,
          fieldvalue={RSI}]
  }
 }
}

上述两个变化产生的结果为:

在此处输入图片描述

相关内容