获取 Biblatex 的 printfield{} 的值

获取 Biblatex 的 printfield{} 的值

我想比较一下\printfield命令的值\ifthenelse

似乎 printfield 没有返回值,因此 ifthenelse 无法检查它。

我怎样才能以 ifthenelse 可以使用的方式访问该值?

我想要实现的是检查值是否大于 9(两位数),如果不大于,则在前面添加 0。

编辑-MWE:

%Short literatur.bib 
\begin{filecontents}{literatur.bib}
@Online{TEST2022,
  author   = {{Author}},
  title    = {Title},
  url      = {https://google.com},
  urldate  = {2022-06-02},
  date     = {2022},
  keywords = {test},
}
\end{filecontents}

\documentclass{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[backend=biber, labeldateparts=true, style=authortitle, isbn=false, dashed=false, maxnames=3, datezeroes=true]{biblatex}

\DeclareCiteCommand{\onlinezitat}[\mkbibfootnote]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}
   \setunit{\addnbspace}
   online:
   \bibhyperref{\printnames[author]{labelname}}
   \setunit{\labelnamepunct}
   \newunit
   \printfield{labelyear}\printfield{extradate}
   \printtext{(}\printfield{urlday}\printtext{.}\printfield{urlmonth}\printtext{.}\printfield{urlyear}\printtext{)}}
  {\addsemicolon\space}
  {\usebibmacro{postnote}}
\renewcommand{\bibfootnotewrapper}[1]{\bibsentence#1}

\addbibresource{literatur.bib}

\begin{document}
Hallo\onlinezitat{TEST2022}.
\end{document}

答案1

作为乌尔丽克·菲舍尔 在评论中指出\printfield朋友们应该打印字段内容,根本不能保证只扩展到相关字段的值。这意味着\printfield内部\ifthenelse检查几乎肯定会失败。

biblatex具有可扩展地检索字段内容的接口(它不提供列表和名称列表的此类功能,因为这些列表没有关联的自然单一“值”,而且这些列表的内部表示不是很方便)\thefield,例如

\thefield{entrykey}

\thefield非常有用,但是如果你想要格式化打印输出,它几乎总是不合适的工具。这可以通过\DeclareFieldFormat和朋友更自然地完成。

在您的示例用例中,我会选择完全不同的东西,因为应该打印日期\print...date而不是手动打印\printfield{...year}等等。

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[
  backend=biber,
  labeldateparts=true,
  style=authortitle,
  isbn=false,
  dashed=false,
  maxnames=3,
  datezeros=true,
]{biblatex}

\NewBibliographyString{online}
\DefineBibliographyStrings{german}{
  online = {online},
}

\DeclareCiteCommand{\onlinezitat}[\mkbibfootnote]
  {\usebibmacro{prenote}}
  {\DeclareFieldFormat{urldate}{\mkbibparens{####1}}%
   \usebibmacro{citeindex}%
   \bibstring{online}%
   \setunit{\addcolon\space}%
   \printnames{labelname}%
   \setunit{\printdelim{nameyeardelim}}%
   \printdateextra
   \setunit{\addspace}%
   \printurldate}
  {\addsemicolon\space}
  {\usebibmacro{postnote}}
\renewcommand{\bibfootnotewrapper}[1]{\bibsentence#1}

\begin{filecontents}{\jobname.bib}
@Online{TEST2022,
  author   = {{Author}},
  title    = {Title},
  url      = {https://google.com},
  urldate  = {2022-06-02},
  date     = {2022},
  keywords = {test},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Hallo\onlinezitat{TEST2022}.
\end{document}

在线:作者 2022(2022 年 6 月 2 日)

相关内容