![获取 Biblatex 的 printfield{} 的值](https://linux22.com/image/451940/%E8%8E%B7%E5%8F%96%20Biblatex%20%E7%9A%84%20printfield%7B%7D%20%E7%9A%84%E5%80%BC.png)
我想比较一下\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}