biblatex 的 PART 和 VOLUME 字段中的字符串

biblatex 的 PART 和 VOLUME 字段中的字符串

当书目条目中的PART和字段为数字时,输出的内容非常合理(见下文)。但是当这些字段为字符串时(对于外语来说,它们通常是字符串),输出就不太理想了。例如,在这种情况下,它不应该打印,因为此信息包含在以下字符串(单词)中,并且输入的任何内容都应在句点后加一个空格,即:VOLUMEbiblatexbiblatexVol.bolkenPART

Skulerud,Olai(1938b)。廷斯马尔特。首先:Ljodlære。安德烈·班德。奥斯陆:Olaf Norli。

简而言之,我想在我的.tex序言中补充以下内容:

“当字段volume不是以数字开头时,按原样打印该字段(无字Vol.)”。

“当字段part不以数字开头,并且字段中包含内容时,则在后面volume打印句点+空格+ ”。partvolume

我应该提到,我在序言中已经提到了一些内容VOLUMEPARTBiblatex 在 PART 字段前打印空格和句点。它包含在下面的 MWE 中。无论我当前问题的解决方案是什么,它都不应该抵消该旧调整的成果。

\documentclass{article}
\usepackage{fontspec,filecontents}
\usepackage[style=authoryear,dashed=false]{biblatex}
\DeclareFieldFormat{part}{\iffieldundef{volume}{#1}{.#1}}
\begin{filecontents}{\jobname.bib}
@BOOK{skulerud1938a,
    AUTHOR = "Olai Skulerud",
    TITLE = "Tinnsmålet",
    YEAR = "1938",
    LOCATION = "Oslo",
    PART = "2",
    PUBLISHER = "Olaf Norli",
    VOLUME = "1"}
@BOOK{skulerud1938b,
    AUTHOR = "Olai Skulerud",
    TITLE = "Tinnsmålet",
    YEAR = "1938",
    LOCATION = "Oslo",
    PART = "Andre bandet",
    PUBLISHER = "Olaf Norli",
    VOLUME = "Fyrste bolken: Ljodlære"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cites{skulerud1938a}{skulerud1938b}.
\printbibliography
\end{document}

在此处输入图片描述

答案1

biblatex\ifinteger\ifnumeral\ifnumerals测试。因此,如果该字段part是一个整数(或整数范围,即 45--72 或“1, 2, 3”,即使表示方式不同),也可以使用以下方法实现所需的效果

\DeclareFieldFormat{part}{%
  \iffieldundef{volume}
    {#1}
    {\ifnumerals{#1}
      {.#1}
      {\adddot\addspace#1}}%
  }

part对于以数字开头的更一般的情况,可以使用xstring包并修改上述代码,如下所示:

\DeclareFieldFormat{part}{%
  \iffieldundef{volume}
    {#1} 
    {\StrLeft{#1}{1}[\FirstOfPart]%
       \IfInteger{\FirstOfPart}%
         {.#1}
         {\adddot\addspace#1}}%
  }

编辑:如果字段volume不是数字(或数值),可以使用相同的技术删除“Vol.”前缀

\DeclareFieldFormat{volume}{%
  \ifnumerals{#1}{\bibstring{volume}\addspace#1}{#1}%
}

需要注意的是,它不包括拼写数字的情况,即“二”。

相关内容