![Biblatex:作者和间接的条目类型](https://linux22.com/image/337105/Biblatex%EF%BC%9A%E4%BD%9C%E8%80%85%E5%92%8C%E9%97%B4%E6%8E%A5%E7%9A%84%E6%9D%A1%E7%9B%AE%E7%B1%BB%E5%9E%8B.png)
我正在尝试以某种方式支持作者姓名的多种书写方式(罗马字、汉字、汉字、假名注音等)。目前尚不支持此功能,而且实验性vform
界面从未进入 biblatex。
我想到了一个想法,为作者定义一种新的条目类型,并在书籍中引用这些作者(有些类似于相关书籍)。
以下是的最小版本multiscript.dtx
:
\DeclareDatamodelEntrytypes{person}
\DeclareDatamodelFields[type=field,datatype=literal]{
kanji,
furi,
}
\DeclareDatamodelFields[type=list,datatype=name]{
romaji,
}
\DeclareDatamodelEntryfields[person]{
kanji,
furi,
romaji,
}
还有一点mwe.bib
:
@person{n1,
kanji = {kanji},
furi = {furi},
romaji = "First Second",
}
@book{b1,
author = {n1},
title = {A great book},
}
有了这些,就可以mwe.tex
编译以下内容:
\documentclass[english]{article}
\usepackage{csquotes}
\usepackage[datamodel=multiscript,backend=biber]{biblatex}
\usepackage{hyperref}
\addbibresource{\jobname.bib}
\newbibmacro*{romaji}{%
\printnames{romaji}%
}
\newbibmacro*{kanji}{%
[\printfield{kanji}]}
\newbibmacro*{furi}{%
(\printfield{furi})}
\DeclareBibliographyDriver{person}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{romaji}%
\addspace
\usebibmacro{furi}%
\addspace
\usebibmacro{kanji}%
\addspace
\usebibmacro{finentry}}
\begin{document}
\nocite{*}
The author First Second \cite{n1} wrote book \cite{b1}.
\printbibliography
\end{document}
现在,我想要实现的是,当打印这本书时,对姓氏进行循环(这只是指向其他条目的链接),然后使用
\entrydata{<lastname>}{%
\printnames{romaji} ....
以便使用链接的条目来打印名称。
我试过
\renewcommand\mkbibnamefamily[1]{%
\message{[mkbibnamefamily] key = #1 ^^J}
\entrydata{#1}{%
\printnames{romaji} (\printfield{kanji}, \printfield{furi})}}
但那不起作用,没有显示姓氏,也没有显示任何字段。此外,该函数还可用于列出对姓名的引用(\cite{n1}
,这在当前上下文中也很有用)。
对于如何实现这种间接性有什么建议吗?
谢谢
诺伯特
答案1
当参数不是对另一个条目的引用时,您需要停止递归,\mkbibnamefamily
否则调用将没有任何用处:\printnames
\entrydata
\renewcommand\mkbibnamefamily[1]{%
\message{[mkbibnamefamily] key = #1 ^^J}%
\ifentryinbib{#1}%
{\entrydata{#1}{%
\printnames{romaji} (\printfield{kanji}, \printfield{furi})}}
{#1}}