在 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/717和https://github.com/plk/biblatex/pull/780尤其https://github.com/plk/biblatex/blob/76d610388104a7402383e162e29e6f2c69159095/tex/latex/biblatex/lbx/magyar.lbx#L110-L137