我正在适应biblatex
巴斯克语。在这种语言中,一些元素需要在字段值后面加上标识字符串。例如
Ed. by Big Publisher Company
应该读
Big Publisher Company-(a)k argit.
我找到了翻译的方法Ed. by
(我正在创建一个basque.ldx
将在某个时候共享的),但我还没有弄清楚如何“反转”字段值和字符串的顺序。(并非所有字段和顺序都应该更改。)
答案1
让我们看看如何byeditor
使用。biblatex.def
我们有
\newbibmacro*{byeditor}{%
\ifnameundef{editor}
{}
{\usebibmacro{bytypestrg}{editor}{editor}%
\setunit{\addspace}%
\printnames[byeditor]{editor}%
\newunit}%
\usebibmacro{byeditorx}}
因此\usebibmacro{bytypestrg}{editor}{editor}
在打印实际编辑器名称之前就会被调用\printnames[byeditor]{editor}
。
bytypestring
定义为
\newbibmacro*{bytypestrg}[2]{%
\iffieldundef{#1type}
{\bibstring{by#2}}
{\ifbibxstring{by\thefield{#1type}}
{\bibstring{by\thefield{#1type}}}
{\printtext{\thefield{#1type}}}}}
因此它只是byeditor(s)
在这里为我们提供了正确的字符串(如果editorytpe
没有要求任何其他东西)。
由于所有其他名称也都以完全相同的方式设置,这意味着在标准中,biblatex
字符串将始终出现在名称之前。无法使用特定方法.lbx
更改这一点.lbx
。并且所有.lbx
文件的设置方式都假定by...
字符串始终直接位于名称之前。另请参阅BibLaTeX 定制:页面前缀到后缀
您必须重新定义所有这些by...
宏才能移动\usebibmacro{bytypestrg}{editor}{editor}
:
\renewbibmacro*{byeditor}{%
\ifnameundef{editor}
{}
{\printnames[byeditor]{editor}%
\usebibmacro{bytypestrg}{editor}{editor}%
\newunit}%
\usebibmacro{byeditorx}}
原则上,这可以在文件中完成.lbx
,但需要多行代码来重新定义所有涉及的宏。
在理想情况下,bibstrings 可能包含“虚拟”变量,这些变量可以自由放置在字符串中,以便允许任何顺序的名称和附加文本。不幸的是,字符串目前还没有以这种方式设置,切换到该模型将需要重新实现 bibstrings,对所有.lbx
文件和所有样式文件(标准样式和自定义样式)进行重大修改。这可能会以所有可能的方式破坏向后兼容性。