用于格式化名称(首字母或全名)的宏

用于格式化名称(首字母或全名)的宏

我想在 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}

在此处输入图片描述

可以轻松添加其他样式。

相关内容