biblatex:字段的内容何时可用

biblatex:字段的内容何时可用

我目前正在为我的样式添加为电影添加替代标题的可能性biblatex-fiwi。这本身并不复杂。但我还想要一种处理不同脚本的机制。这个想法是,根据脚本,将创建一个 bibmacro,稍后可以将其定义为加载支持所需脚本的特定支持。

我添加了两个字段alternatetitlealternatetitlescript。为此,必须将以下几行添加到 .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{alterna‌​tetitle}}

按预期工作。

相关内容