我目前正在为我的样式添加为电影添加替代标题的可能性biblatex-fiwi
。这本身并不复杂。但我还想要一种处理不同脚本的机制。这个想法是,根据脚本,将创建一个 bibmacro,稍后可以将其定义为加载支持所需脚本的特定支持。
我添加了两个字段alternatetitle
和alternatetitlescript
。为此,必须将以下几行添加到 .dbx 文件中,例如biblatex-dm.cfg
:
\DeclareDatamodelFields[type=field, datatype=literal]{alternatetitle}
\DeclareDatamodelFields[type=field, datatype=literal]{alternatetitlescript}
\DeclareDatamodelEntryfields[movie,misc,video]{alternatetitle, alternatetitlescript}
以下 MWE 示例有点复杂:
\RequirePackage{filecontents} \begin{filecontents}{\jobname.bib}
@movie{themovie,
Address = {USA},
Alternatetitle = {Аэлита},
Alternatetitlescript = {cyrillic},
Director = {Mad, Max},
Title = {The Title},
Year = {1996}}
\end{filecontents}
\documentclass{article}
\usepackage[style=fiwi]{biblatex}
\usepackage{ragged2e}
\renewbibmacro*{filmtitle}{\iffieldundef{maintitle}
{\printtext{\printfield[film]{title}}}
{\printfield[film]{maintitle}\newunit}%
\iffieldundef{alternatetitle}
{}
{\usebibmacro{bbx:cite-alternatetitle}}
\iffieldundef{subtitle}%
{}%
{\setunit{}%
\printtext{\addspace\printfield{subtitle}}}%
\iffieldundef{volume}%
{}%
{\printfield[season]{volume}}%
\iffieldundef{number}%
{}%
{\addcomma\addspace\printfield[episode]{number}}%
\iffieldundef{maintitle}%
{}%
{\addcolon\addspace\printfield[film]{title}}%
\ifpunctmark{!}{\unspace.\newunit}{\adddot}}%
\newbibmacro*{bbx:cite-alternatetitle}{
\iffieldundef{alternatetitlescript}
{\addslash\printfield{alternatetitle}}
{\addslash\ifbibmacroundef{altscript:\strfield{alternatetitlescript}-font}
{\textsc{\thefield{alternatetitle}}}{\usebibmacro{altscript:\strfield{alternatetitlescript}-font}%
{\thefield{alternatetitle}}} }}
\addbibresource{\jobname.bib}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\newbibmacro*{altscript:cyrillic-font}[1]{\newfontfamily\cyrfont[Extension = .ttf,]{Linux Libertine}{\cyrfont{\textsc{#1}}}}
\begin{document}
\citefilm{themovie}
\printbibliography
\end{document}
这个想法是altscript:<alternatetitlescript>-font
创建一个名为的宏,可以在文档中定义。问题是的内容alternatetitlescript
没有解析。这更奇怪,因为测试是否alternatetitlescript
为空实际上是有效的。但后来当它应该成为宏名的一部分时,内容alternatetitlescript
似乎不可用。
答案1
未加星号的版本\usebibmacro
使用 来净化宏名\detokenize
。由于我们希望\strfield{alternatetitlescript}
被扩展,因此我们需要解决这个问题。加星号的版本\usebibmacro*
不对宏名进行任何净化,因此
\usebibmacro*{altscript:\strfield{alternatetitlescript}-font}{\thefield{alternatetitle}}
按预期工作。