我想知道是否可以关闭\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}]
}
}
}
上述两个变化产生的结果为: