我想在 LaTeX 源中写下作者的全名,但为他们分配不同的角色,然后通过宏决定是否打印全名或仅打印首字母:
In the work of \artist{Iannis Xenakis}, as analysed by \researcher{John Doe}.
我认为我最终想要的输出是:
In the work of Iannis Xenakis, as analysed by J Doe.
但我可能想要J. Doe
或者John Doe
只是Doe
——我想保持这个决定开放,因此宏......
我正在使用biblatex
,但我不想使用,\citeauthor
因为提及的内容通常与引用的特定论文没有直接关系。不过,也许我可以重复使用一些附带的宏biblatex
?
这是我的想法:我认为这\DeclareNameFormat
可能提供了一种定义自定义格式的好方法。但是使用这种格式将名称插入文本的宏会是什么样子?我可以使用吗\citename{⟨key⟩}[⟨format⟩]{⟨name list⟩}
?我理解这name list
将是我的源名称,如上所示,但我应该使用什么作为键?
答案1
您可以在bib
文件中添加虚拟的参考书目条目(并添加options = {dataonly=true},
以确保它们不包含在参考书目中或用于标签创建)。基于此,您可以\citename
按照问题中的建议使用,或者为了方便起见,创建一个自定义宏(例如\formatname
),这样就无需指定author
必需的名称列表。
\documentclass{article}
\usepackage{biblatex}
\DeclareNameFormat{firstinits-last}{%
\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
\usebibmacro{name:andothers}}
\DeclareNameAlias{artist}{first-last}
\DeclareNameAlias{researcher}{firstinits-last}
\newcommand*{\formatname}[2]{%
\citename{fn#1}[#2]{author}%
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{Doe12,
author = {Doe, John},
year = {2012},
title = {A macro for formatting names},
}
@misc{fnDoe,
options = {dataonly=true},
author = {Doe, John},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\formatname{Doe}{artist}
\formatname{Doe}{researcher}
\printbibliography
\end{document}
答案2
biblatex
这是一个根本不使用的想法:
\documentclass{article}
\makeatletter
% define the styles for the first name; these are going to be the values
% for the optional argument of \NewNameType;
% \@style => \NewNameType[style]{<csname>}
\def\@fullname#1\q@stop{#1~}
\def\@initial#1#2\q@stop{#1~}
\def\@initialdot#1#2\q@stop{#1.~}
\def\@noname#1\q@stop{}
% define the user command; the optional arguments sets the format;
% I chose `initial' as default:
\newcommand*\NewNameType[2][initial]{%
\expandafter\newcommand\expandafter*\csname#2\endcsname[1]{\@nameuse{#2@aux}##1\q@stop}%
\@namedef{#2@aux}##1 ##2\q@stop{\@nameuse{@#1}##1\q@stop##2}}
\makeatother
% define some styles:
\NewNameType{researcher} % J Doe
\NewNameType[fullname]{artist} % John Doe
\NewNameType[noname]{baker} % Doe
\NewNameType[initialdot]{musician} % J. Doe
\begin{document}
\researcher{John Doe} \par
\artist{John Doe} \par
\baker{John Doe} \par
\musician{John Doe}
\end{document}
可以轻松添加其他样式。