我想在第一次提及这些内容时添加我访问在线参考资料的日期。我使用biblatex
这种authoryear-comp
风格。以下是 MWE:
\documentclass{scrreprt}
\usepackage[style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{key,
title = {Very nice online reference},
url = {https://www.example.com/},
urldate = {2019-11-25},
author = {Nobody},
}
\end{filecontents}
% Start of the document.
\begin{document}
% Your content.
I want to cite here with the urldate in the citation.
\parencite{key} should look like:
(Author 2001, visited on 25.11.2019) but just when I first reference it.
In every later cication it shall just look (Author 2001).
% End of the document.
\end{document}
有人能帮我解决这个问题吗?
用户备注https://tex.stackexchange.com/users/14649:这是一个后续问题如何在文本中访问 urldate。
答案1
您可以尝试类似这样的操作。citetracker
测试需要该选项\ifciteseen
。的定义cite
是来自的原始定义,其中authoryear-comp.cbx
包含以下两行
\setunit{\addcomma\space}%
\usebibmacro{cite:urlinfo}%
添加在最后。
也可以对 进行同样的操作textcite
,但需要注意的是\textcite
有一些特殊情况(压缩引文、没有名称或年份的引文、简写),这种配置可能会产生略微出乎意料的输出。我想不出更好的通用解决方案,因此我建议仔细检查输出。
\documentclass{scrreprt}
\usepackage[style=authoryear-comp, citetracker]{biblatex}
\newbibmacro*{cite:urlinfo}{%
\ifciteseen
{}
{\DeclareFieldFormat{urldate}{\bibstring{urlseen}\space##1}%
\printurldate}}
\makeatletter
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}%
\usebibmacro{cite:labeldate+extradate}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extradate}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labeldate+extradate}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}%
\usebibmacro{cite:labeldate+extradate}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\addcomma\space}%
\usebibmacro{cite:urlinfo}%
\setunit{\multicitedelim}}
\renewbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\iffieldundef{shorthand}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extradate}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labeldate+extradate}%
\savefield{labelyear}{\cbx@lastyear}}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nonameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labeldate+extradate}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\usebibmacro{cite:label}}
{\usebibmacro{cite:labeldate+extradate}}%
\savefield{labelyear}{\cbx@lastyear}}
{\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}}%
\setunit{\addcomma\space}%
\usebibmacro{cite:urlinfo}%
\setunit{%
\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\textcitedelim}}
\makeatother
\begin{filecontents}{\jobname.bib}
@online{key,
title = {Very nice online reference},
url = {https://www.example.com/},
urldate = {2019-11-25},
author = {Nobody},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\parencite{key}
\parencite{key}
\end{document}