Как добавить urldate к первой ссылке в онлайн-ссылках

Как добавить urldate к первой ссылке в онлайн-ссылках

Я хочу добавить дату, когда я посетил свои онлайн-ссылки в самом первом упоминании о них. Я использую 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}

(Никто 2019, посетил 25.11.2019)//(Никто 2019)

Связанный контент