我正在尝试创建一个biblatex
类型的自定义字段key
\DeclareDatamodelFields[type=field, datatype=key]{myfield}
根据我对文档的理解
关键字段 可能包含可打印数据或本地化密钥。将执行测试以确定字段的值是否是已知的本地化密钥(默认定义的本地化密钥列于 §4.9.2 中)。如果是,则打印本地化字符串。如果不是,则按原样打印值。一个典型的例子是类型字段。
如果myfield
值为editortr
并且语言为英语,我应该得到editor and translator
(或者可能ed. and trans.
)。但这不是我看到的。我错过了什么?
\documentclass[english]{article}
\begin{filecontents}{\jobname.bib}
@article{foo,
myfield = {editortr}
}
\end{filecontents}
\begin{filecontents}{\jobname.dbx}
\DeclareDatamodelFields[type=field, datatype=key]{myfield}
\end{filecontents}
\usepackage{xpatch}
\usepackage{babel}
\usepackage[datamodel=\jobname]{biblatex}
\addbibresource{\jobname.bib}
\xpatchbibdriver{article}{%
\printlist{language}%
}{%
\printlist{language}%
\printfield{myfield}%
}{}{}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
日志告诉我它找到了english.lbx
软件包 biblatex 信息:尝试加载语言‘english’... 软件包 biblatex 信息:... 找到文件‘english.lbx’。
答案1
文档中引用的这段话有点误导。它暗示后端(BibTeX/Biber)会执行测试以确定给定的值是否是本地化字符串,还暗示这会自动发生。这两种情况都不正确。
Biber 和 BibTeX 处理普通键字段的方式与处理文字字段的方式完全相同。实际上,
.bbl
对于文字和键数据类型,输出的数据完全相同。(我记得 Biber 会将langid
字段从 BCP 47 重新映射到babel
标识符,我可以在 Biber 源中仍可以看到部分内容,但我未能提供一个按我预期方式工作的例子...无论如何,这是一个字段的硬编码行为。)文字和键字段或列表之间的区别仅在其格式在末尾声明时才显现出来
biblatex
。文字类型只是按原样打印,而键类型通常具有如下声明\DeclareFieldFormat{type}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
它实现了引用段落中的行为,但是在侧面
biblatex
。这必须在字段格式中明确完成。即使该字段被声明为数据类型键,它也不会自动发生。
这意味着你需要
\DeclareFieldFormat{myfield}{\ifbibstring{#1}{\bibstring{#1}}{#1}}
在你的例子中。
我已经在 开过票https://github.com/plk/biblatex/issues/839讨论文档的变更,以便将来的行为能够清晰地记录下来。非常欢迎提出建议。