我尝试使用 比布拉特克斯(需定制)匈牙利语 babel 语言定义文件。匈牙利语的 babel 语言被称为magyar
(意思是:匈牙利语)。
我正在写一篇文章,其中还引用了英语和匈牙利语文章。我设法创建匈牙利语基于英文.lbx能够在参考书目中使用匈牙利语文本,具体说明hyphenation = {magyar}
如下围兜文件,并且它运行起来非常好。
问题是我想进一步修改参考书目的格式,因为匈牙利语中姓氏和名字的顺序是相反的,例如匈牙利语儒勒·凡尔纳写成如下:凡尔纳。
这是在huplain.bst与 BibTeX 一起使用(使用指定选项huname =1
),但不幸的是它不适用于作者年份格式的引用(例如 natbib 或 babelbib),这就是为什么我不得不寻找其他解决方案。对我来说,修改 biblatex 的代码似乎是最简单的方法。
有人知道我该如何放置一些条件语句,以便能够\DeclareNameFormat{labelname}
以相反的顺序列出匈牙利名字,而姓氏和名字之间没有逗号吗?我希望可以做到。谢谢阅读!
編輯基于@michal.h21 的回答:
我已在匈牙利基于@michal.h21的回答和评论,关于本主题结果的语言。您可以找到它这里。
大多数重要功能都有效,一些次要部分则不那么吸引人,但总能以某种方式发挥作用。欢迎提出任何额外的意见!
答案1
您可以尝试在 lbx 文件的 \DeclareBibliographyExtras 部分中定义格式化命令。
因此在 magyar.lbx 中
\protected\def\nameprint#1#2{#1\space#2}
和英语.lbx
\protected\def\nameprint#1#2{#2\addcomma\space#1}
并在 bbx 中定义名称格式:
\DeclareNameFormat{default}{%
\nameprint{#1}{#3}
..call macro for punctation
..call macro for and others
}
编辑: 我昨天很匆忙,所以没有发布完整的示例。
DeclareNameFormat 是命令,它接受 8 个参数。它们是:
- #1 姓氏。如果姓名仅由一个部分组成(例如,“亚里士多德”),则此部分将被视为姓氏。
- #2 姓氏,以首字母表示。
- #3 名字。此参数还包括所有中间名。
- #4 名字以首字母表示。
- #5 名称前缀,例如 von、van、of、da、de、del、della 等。请注意,在 BibTeX 文档中,名称前缀被称为名称的“von 部分”。
- #6 姓名前缀,以首字母表示。
- #7 名称 aYxes,例如 'junior'、'senior'、'der Jüngere'、'der Ältere' 等。请注意,在 BibTeX 文档中,名称 aYxes 被称为名称的“junior 部分”。
- #8 名字 aYxes,以首字母缩写形式给出。
如果作者数量小于 \value{maxnames},则对列表中的每个名称调用此命令。如果您有 8 位作者,并且 maxnames 设置为 5,则它将仅打印不超过 \value{minnames} 的作者,我将此值设置为 3。
我们用完整的姓氏和名字调用命令 \nameprint。如果您需要姓名的其他部分,请使用上面列表中的某些参数。
然后我们必须在每个作者后面打印标点符号。我使用以下宏来实现:
\newbibmacro{names:separator}{%
\ifthenelse{\value{listcount}<\value{liststop}}%
{\addsemicolon\addspace}%
{}%
}
此宏会在除最后一位作者之外的每位作者后打印分号和空格。如果您想要除分号之外的其他标点符号,您可以用其他标点符号命令替换它。它们的列表位于 biblatex 手册第 155 页。或者您可以直接使用 \printtext 命令打印字符。
我的 andothers 宏如下所示:
\newbibmacro*{names:andothers}{%
\ifboolexpr{%
test {\ifnumequal{\value{listcount}}{\value{liststop}}}%
and%
test \ifmorenames%
}{\bibsstring{andothers}}%
{}%
}
我们不必在 andothers 之后添加标点符号,因为它会在 \DeclareBibliographyDriver 中使用下一个 \newunit 命令自动打印。
所以我的 \DeclareNameFormat 现在看起来像这样:
\DeclareNameFormat{default}{%
\nameprint{#1}{#3}
\usebibmacro{names:separator}%
\usebibmacro{names:andothers}%
}
现在我发现,我的第一个 \nameprint 版本不正确。Magyar 版本可能应该是:
\protected\def\nameprint#1#2{#2\space#1}
英语:
\protected\def\nameprint#1#2{#1\addcomma\space#2}
您必须为参考书目中使用的每种语言定义此宏,否则您将收到有关未定义命令的错误消息。
根据此帖下方的评论进行另一项编辑:
您必须创建 bbx 和 cbx 文件。例如:
huglain.bbx
\ProvidesFile{hugplain.bbx}
\DeclareLanguageMapping{magyar}{magyar}
\RequireBibliographyStyle{authoryear}
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibsstring{and}\space}
\newbibmacro{names:separator}{%
\ifthenelse{\value{listcount}<\value{liststop}}%
{\addcomma\addspace}%
{}%
}
\newbibmacro{names:separator2}{%
\ifthenelse{\value{listcount}<\value{liststop}}%
{\addspace}%
{}%
}
\newbibmacro*{names:andothers}{%
\ifboolexpr{%
test {\ifnumequal{\value{listcount}}{\value{liststop}}}%
and%
test \ifmorenames%
}{\bibsstring{andothers}\addcomma}%
{}%
}
%\DeclareNameFormat{default}{%
% \nameprint{#1}{#3}
% \usebibmacro{names:separator}%
% \usebibmacro{names:andothers}%
% }
\DeclareNameFormat{sortname}{%
\nameprint{#1}{#3}
\usebibmacro{names:separator}%
\usebibmacro{names:andothers}%
}
\endinput
通知行
\DeclareLanguageMapping{magyar}{magyar}
这是在加载您的 magyar.lbx 文件。在当前版本中,此文件根本没有使用,因此在您的引文中,姓氏前面是“and”,而不是“és”
hugplain.cbx相当简单
\ProvidesFile{hugplain.cbx}
\RequireCitationStyle{authoryear}
\endinput
在您的 tex 文件中,删除所有 biblatex 宏并使用 \usepackage[english,magyar]{babel} 调用 babel。最后一种语言是文档的主要语言。
在文件顶部匈牙利语,在 \PorvidesFile... 行下方添加行
\InheritBibliographyExtras{english}
\InheritBibliographyStrings{english}
并且参考书目字符串有误,请替换
bibliography = {{Felhasznált\addspaceirodalom}{Felhasznált\addspaceirodalom}},
和
bibliography = {{Felhasznált\addspace{}irodalom}{Felhasznált\addspace{}irodalom}},
最后,你应该在你的 bib 文件中为英文出版物添加连字符字段,除非你想有这样的引用Berk、Kriegler 和 Ylvisaker
答案2
我遇到了类似的问题,但引用了匈牙利和非匈牙利合著者的论文。因此,这种hyphenation
方法对我来说没什么用。相反,我选择(错误地)使用名字中的 junior 部分。结果可能被用来吓唬小孩子。:-)
匈牙利作家可以写为Vezetéknév, HUN, Keresztnév
,而非匈牙利作家则保持原样。
magyar.bbx
是
\ProvidesFile{magyar.bbx}
\DeclareLanguageMapping{magyar}{magyar}
\RequireBibliographyStyle{authoryear-comp}
\def\@magyarbbx@hun{HUN}
\DeclareNameFormat{sortname}{%
\begingroup%
\edef\juniorpart{#7}%
\ifx\juniorpart\@magyarbbx@hun%
% Hungarian name
\usebibmacro{name:first-last}{#3}{#1}{#5}{\relax}%
\else%
% English name
\ifnum\value{listcount}=1\relax%
\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}%
\else%
\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
\fi%
\fi%
\endgroup%
}
\endinput
而magyar.cbx
只是
\ProvidesFile{magyar.cbx}
\RequireCitationStyle{authoryear-comp}
\endinput
引用样式不需要修改的原因是,仅authoryear
当两个作者的次要部分不同但名字/姓氏相同时,才会在引用中打印次要部分。
当然,如果匈牙利作者确实需要初级部分,这种方法就会失败,但通常情况并非如此。我想可以实施更复杂的检查和真正的引用风格。