如何使用 authortype 自动设置文章?

如何使用 authortype 自动设置文章?

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}

在此处输入图片描述

相关内容