BibLaTeX 文档提到一个字段authortype
:
authortype 字段(关键)
作者类型。此字段将影响用于介绍作者的字符串(如果有)。标准书目样式不使用。
我想知道这是否旨在和/或可用于自动在引文前设置定冠词。考虑以下简短文本:
\documentclass{article}
\usepackage[style=numeric]{biblatex}
\bibliography{foo}
\begin{document}
\Textcite{soc} thinks pine trees are really bad off
while \textcite{guy} begs to differ.
\Citeauthor{guy} and \citeauthor{soc} both love pine trees though.
\printbibliography
\end{document}
使用以下示例.bib
文件:
@misc{soc,
author={{Pine Tree Society}},
title={On the Mistreatment of Pine Trees through the Ages},
authortype={body}
}
@misc{guy,
author={Woodman, Hans},
title={Pine Trees -- A Natural Success Story},
authortype={person}
}
目前这给了我这样的:
我更希望的是:
有人尝试过这样的事情吗?有人知道如何做到这一点吗?
答案1
是的,你可以。但这是错误的做法 (!),因为 authortype 存在的原因不同:它应该表明作者在作品中的角色,如“编辑者”,并且应该直接打印或作为 bibstring 打印,这就是为什么你会在参考书目中看到它。我们可以在打印参考书目之前摆弄一下清除字段,但一定有更好的方法。
所以,我们不要这么做(虽然我们可以这么做)。相反,让我们使用一个选项来表明作者是否是法人。我使用了“body”,因此可以设置“body=true”或仅设置“body”。这样,我们就不必担心将要打印的内容用于“元”目的。我们不需要“person”选项,因为我们可以假设这是默认选项。选项是传达此类“元”信息的一种好方法,可用于格式化但不打印。
完成这些之后,如果选择了“body”选项,我们需要稍微调整一下\textcite
,\citeauthor
让它们在作者姓名前打印一个定冠词。实际上,在每种情况下,我们只更改一行以包含对我们定义的命令的调用,\defarticle
该命令使用内部标点符号跟踪来决定是否使用大写字母。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{soc,
author={{Pine Tree Society}},
title={On the Mistreatment of Pine Trees through the Ages},
options = {body},
}
@misc{guy,
author={Woodman, Hans},
title={Pine Trees -- A Natural Success Story},
}
\end{filecontents}
\usepackage[style=numeric]{biblatex}
\addbibresource{\jobname}
\newtoggle{isbody}
\DeclareEntryOption{body}[true]{%
\settoggle{isbody}{#1}}
\newcommand\defarticle{%
\iftoggle{isbody}{\ifcapital{The}{the}\space}{}}
\makeatletter
\renewbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\multicitedelim}
{\cbx@tempa
\ifnameundef{labelname}
{\printfield[citetitle]{labeltitle}}
{\printtext{\defarticle}\printnames{labelname}}%
\addspace\bibopenbracket}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite}%
\savefield{namehash}{\cbx@lasthash}%
\gdef\cbx@tempa{\bibclosebracket\multicitedelim}}
\DeclareCiteCommand{\citeauthor}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printtext{\defarticle}\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnote}}
\makeatother
\begin{document}
\Textcite{soc} thinks pine trees are really bad off
while \textcite{guy} begs to differ.
\Citeauthor{guy} and \citeauthor{soc} both love pine trees though.
\printbibliography
\end{document}