BibLaTeX 定制:页面前缀到后缀

BibLaTeX 定制:页面前缀到后缀

在 BibLaTeX 中是否有任何(简单的)方法可以转换

pp. 55-57

进入

55-57 orr.

? 例如,我知道pp.可以使用以下命令删除前缀:

\DeclareFieldFormat{pages}{#1}

但实际上我需要的是将其改为orr. 将其移至右侧,以便其出现在页面或页面范围之后。有什么想法吗?

(如果有人感兴趣的话,这就是巴斯克语的55-57 orr.表达方式)。pp. 55-57

答案1

如果你确定你总是想要在特定文档中实现这种行为 - 也就是您不切换语言 - 以下内容可能适合您。

以下代码通过重新定义将“page”或“pages”字符串移到实际页码后面\mkpageprefix

\makeatletter
\protected\long\def\blx@mkpageprefix#1[#2]#3{%
  \blx@mkpageprefix@i[#2]{#3}%
  \ifnumeral{#3}
    {\ppspace\bibstring{#1}}
    {\ifnumerals{#3}
       {\ppspace\bibstring{#1s}}
       {\def\pno{\bibstring{#1}}%
        \def\ppno{\bibstring{#1s}}}}%
  }
\makeatother

请注意,虽然您通常使用\parencite[\pno~7a]{coleridge}强制页面前缀来biblatex放置它,但现在您必须使用它,\parencite[7a~\pno]{coleridge}因为它是一个后缀(易于记忆)。

对于下面的例子,我使用它american作为一种语言并将页面字符串更改为“orr”以获得更好的效果,但这可以在任何语言中完成,如果本地化已经存在,您甚至不必更改 bibstrings。

\documentclass[a4paper,american]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[style=authoryear,backend=biber]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\DefineBibliographyStrings{american}{%
  page           = {orr\adddot},
  pages          = {orrs\adddot},
}

\makeatletter
\protected\long\def\blx@mkpageprefix#1[#2]#3{%
  \blx@mkpageprefix@i[#2]{#3}%
  \ifnumeral{#3}
    {\ppspace\bibstring{#1}}
    {\ifnumerals{#3}
       {\ppspace\bibstring{#1s}}
       {\def\pno{\bibstring{#1}}%
        \def\ppno{\bibstring{#1s}}}}%
  }
\makeatother

\begin{document}
\parencite[5]{westfahl:space}
\parencite[7]{coleridge}
\parencite[7a~\pno]{coleridge}
\cite[6]{companion} and \cite[6--78]{companion}

\printbibliography
\end{document} 

产量 在此处输入图片描述

请注意,这里的解决方案并不是最好的,所以如果此功能对您很重要 - 并且您可能有时需要页面前缀,有时需要后缀用于多语言文档 - 您可能需要要求维护人员biblatex包含一个根据语言切换前缀/后缀的功能。

编辑匈牙利本地化版本即将推出,并实施了类似的功能biblatex,请参阅https://github.com/plk/biblatex/issues/717https://github.com/plk/biblatex/pull/780尤其https://github.com/plk/biblatex/blob/76d610388104a7402383e162e29e6f2c69159095/tex/latex/biblatex/lbx/magyar.lbx#L110-L137

相关内容