如何使用 biblatex、biber 和 polyglossia 创建多语言(英语、日语)书目

如何使用 biblatex、biber 和 polyglossia 创建多语言(英语、日语)书目

我希望更新我的 bibtex 文件,以便能够创建多语言书目。由于我用英语和日语发表文章,因此我需要这样做:在英语论文中,

  • 参考书目中的日文条目将同时使用汉字和罗马字母来显示作者姓名;标题也必须以这种方式重复,但此外,我有时也会翻译标题,因此可能有三个条目。
  • 英文引文将照常出现。

在一份日本报纸上

  • 日语条目仅包含汉字的作者、标题等,没有任何附加内容。
  • 英文条目可能有标题的翻译,并以日语片假名拼写出作者。

为了实现这一点,我想用以下方式扩展 bibtex 条目

@collection{yanagida_zengaku_sosho_1975,
    Address = {京都},
        Adress_Romaji = {Kyōto}
    Editor = {柳田聖山},
        Editor_Romaji = {Yanagida Seizan}
    Publisher = {中文出版社},
    Publisher_Romaji = {Chūbun shuppansha},
    Title = {禪學叢書},
    Title_Romaji = {Zengaku sôsho},
        Title_en = {Collected Materials for the Study of Zen}
    Volumes = {10},
    Year = {1974-1977}}

然后我希望能够从这里取出必要的部分,并用 biber 和 biblatex 处理它们。如何去做,我不知道。

答案1

我已经与 biblatex 维护者讨论过这个问题,我们可能会在 biblatex 3.x 中实现这种样式。使用 1.7/0.9.6,以下操作将成为可能。您必须对此类条目使用实验性的 biblatexml 数据源格式(您仍然可以将所有常规条目设为 bibtex 格式)。

<?xml version="1.0" encoding="UTF-8"?>
<bib:entries xmlns:bib="http://biblatex-biber.sourceforge.net/biblatexml">
  <bib:entry id="yanagida_zengaku_sosho_1975" entrytype="collection">
    <bib:editor>
      <bib:person gender="sm">柳田聖山</bib:person>
    </bib:editor>
    <bib:editor mode="romanised">
      <bib:person>
        <bib:first>
          <bib:namepart initial="Y">Yanagida</bib:namepart>
        </bib:first>
        <bib:last>Seizan</bib:last>
      </bib:person>
    </bib:editor>
    <bib:title>禪學叢書</bib:title>
    <bib:title mode="romanised">Chūbun shuppansha</bib:title>
    <bib:title mode="translated" xml:lang="en">Collected Materials for the Study of Zen</bib:title>
    <bib:location>京都</bib:location>
    <bib:location mode="romanised">Kyōto</bib:location>
    <bib:location mode="translated" xml:lang="en">Kyoto</bib:location>
    <bib:publisher>中文出版社</bib:publisher>
    <bib:publisher mode="romanised">Chūbun shuppansha</bib:publisher>
    <bib:date>
      <bib:start>1974</bib:start>
      <bib:end>1977</bib:end>
    </bib:date>
  </bib:entry>
</bib:entries>

使用 bibtex 格式无法做到这一点,但对于 biber 来说这不是问题 - 您可以拥有许多不同格式的数据源。例如,在上面的例子中,您可以选择使用显示格式“罗马化”,而 biber 将仅使用罗马化模式字段构建 .bbl。但是,无法在同一条目中使用混合模式,因为这需要彻底增强的 .bbl 格式和大量内部 biblatex 更改,这些更改计划在版本 3.x 中实现

上述示例使用全局 displaymode 设置(将在 biblatex 1.7 中使用)。您还可以使用条目上的属性设置每个条目的模式,例如:

<bib:entry id="yanagida_zengaku_sosho_1975" entrytype="collection" mode="translated">

默认模式是“原始”,它也匹配未指定模式的字段。

在 biber 0.9.6/biblatex 1.7 版本上编辑:现在已按所述实施。默认全局设置为:

\DeclareDisplaymode{original,romanised,uniform,translated}

此 biblatex 宏目前尚未记录,但您应该能够使用它来更改全局显示模式选择顺序。您还可以按上图所示设置每个条目的显示模式。如果您遇到问题,请在 biber SourceForge 论坛上告诉我。

答案2

我添加了另一个答案,因为 biblatex 3.0+biber 2.0 现在处于实验版本,并且对此有不同的解决方案。您现在可以像这样创建一个 test.bib 文件:

@COLLECTION{yanagida_zengaku_sosho_1975,
  LANGID = {japanese},
  EDITOR = {柳田聖山},
  EDITOR_romanised = {Yanagida, Seizan},
  TITLE = {禪學叢書},
  TITLE_romanised = {Chūbun shuppansha},
  TITLE_translated_english = {Collected Materials for the Study of Zen},
  LOCATION = {京都},
  LOCATION_romanised = {Kyōto},
  LOCATION_translated_english = {Kyoto},
  PUBLISHER = {中文出版社},
  PUBLISHER_romanised = {Chūbun shuppansha},
  DATE = {1974/1977}
}

使用此文档和 XeLaTeX:

\documentclass{article}
\usepackage{fontspec} 
\usepackage{polyglossia} 
\setdefaultlanguage{english}
\usepackage{xeCJK}
\setCJKmainfont{Hiragino Mincho Pro}

\usepackage[style=authoryear,%
            language=auto,%
            autolang=langname,%
           ]{biblatex}
\addbibresource{test.bib}

\begin{document}
\nocite{*}

\printbibliography
\end{document}

你会得到:

在此处输入图片描述

添加新的 3.0 biblatex 选项vform=romanised(全局添加或者添加到options.bib 条目的字段),您将获得:

在此处输入图片描述

更重要的是,所有 biblatex 内部和外部现在都了解这些字段变体,因此您可以取消设置vform并重新定义,例如:

\renewbibmacro*{editor+others}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \addspace\mkbibparens{\printnames[][][form=romanised]{editor}}
     \setunit{\addcomma\space}%
     \usebibmacro{editor+othersstrg}%
     \clearname{editor}}
    {}}

(注意\printnames调用)。现在你得到:

在此处输入图片描述

您可以通过改变样式来引用变体,从而在同一参考书目中混合任何变体,而不会滥用字段orig*。您可以用它做更多的事情,请参阅 biblatex 3.0 文档。biblatex 3.0 位于 SourceForge 上的“实验”文件夹中,您需要使用 biber 2.0。

答案3

我正在使用自定义样式来解决这个问题。对于 MWE,我们使用测试文件类似于 PLK 准备的文件:

@COLLECTION{yanagida_zengaku_sosho_1975,
  LANGID = {japanese},
  EDITOR = {柳田聖山},
  editor_romanised = {Yanagida, Seizan},
  TITLE = {禪學叢書},
  TITLE_romanised = {Zengaku sōsho},
  TITLE_translated_english = {Collected Materials for the Study of Zen},
  LOCATION = {京都},
  LOCATION_romanised = {Kyōto},
  LOCATION_translated_english = {Kyoto},
  PUBLISHER = {中文出版社},
  PUBLISHER_romanised = {Chūbun shuppansha},
  DATE = {1974/1977}
}

首先我们需要扩展 biblatex 的数据模型。添加一个名为biblatex-dm.cfg类似这样的内容:

% Declare transliterated/translated fields
% To guess the type cf. https://github.com/plk/biblatex/blob/dev/tex/latex/biblatex/blx-dm.def

\DeclareDatamodelFields[type=field, datatype=literal]{title_romanised}
\DeclareDatamodelFields[type=list, datatype=literal]{location_romanised}
\DeclareDatamodelFields[type=list, datatype=name]{editor_romanised, author_romanised}

%Fields should be now assigned relevant entry types, but it seems not to be actually needed...
%\DeclareDatamodelEntryfields{title_romanised, editor_romanised, author_romanised,...}

最后,我们必须定义一个根据需要使用字段的样式。例如,要打印罗马化的标题和编辑器(如果可用),请创建一个名为罗马化和:

\ProvidesFile{addromanised.bbx}

%A base style
\RequireBibliographyStyle{numeric}

%Check what bibmacros need to be rewritten. See the style you are using as a base to find out the macros. They usually come from:
%https://mirror.hmc.edu/ctan/macros/latex/exptl/biblatex/latex/bbx/standard.bbx
%https://github.com/plk/biblatex/blob/dev/tex/latex/biblatex/biblatex.def

\renewbibmacro*{title}{%
  \iffieldundef{title_romanised}{%
    \printfield{title}%
  }{%
    \printfield{title} (\printfield{title_romanised})%
  }%
}%

\renewbibmacro*{editor+others}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\ifnameundef{editor_romanised}{%
      \printnames{editor} %
    }{%
      \printnames{editor} (\printnames{editor_romanised}) %
    }%
     \setunit{\printdelim{editortypedelim}}%
     \usebibmacro{editor+othersstrg}%
     \clearname{editor}}
    {}}

该文件很容易扩展以添加更多字段或添加翻译,或用罗马化版本替换它们。

以下代码展示了如何将样式与 LuaLaTeX 结合使用:

\documentclass{article}

\usepackage{fontspec}
\usepackage{luatexja-fontspec}

\usepackage{polyglossia} 
\setdefaultlanguage{english}

\usepackage[backend=biber,bibstyle=addromanised]{biblatex}
\addbibresource{test.bib}

\begin{document}
\nocite{*}

\printbibliography
\end{document}

答案输出

创建一个添加片假名字段的附加样式将解决另一半问题。

最后,如果您要按这些字段排序,您可能希望在可用时使用罗马化。例如,要调整尼夫特排序您可以将以下代码添加到您的样式中:

\DeclareSortingScheme{romanisednyvt}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort{
    \field{sortname}
    \field{author_romanised}
    \field{author}
    \field{editor_romanised}
    \field{editor}
    \field{translator}
    \field{sorttitle}
    \field{title_romanised}
    \field{title}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field{volume}
    \literal{0}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
}

并加载\usepackage[backend=biber,bibstyle=addromanised sorting=romanisednyvt]{biblatex}

答案4

我也遇到了日文+英文文本的问题。使用CJKutf8包并插入\begin{CJK*}{UTF8}{MS Mincho}...\end{CJK*}日文文本 - 甚至在 bib 文件中!- 对我来说有效。示例:

文档.tex

\documentclass{article} % document style - adjust to your needs
\usepackage[square,numbers,sort&compress]{natbib} % citation style - adjust to your needs

\usepackage{CJKutf8} % this is the library needed to include chinese, japanese, korean and thai characters

\begin{document}
    
    Hello World. Citation example\cite{mynaviEneplat2022}. Japanese font in text:
    %  in the 'MS Mincho' font - if you need other languages, you might need other fonts.
    \begin{CJK*}{UTF8}{MS Mincho} % {goth} or {min} didn't work for me, I don't know why
        こんにちは世界
    \end{CJK*}
    
    % japanese font in bibliography:
    \bibliographystyle{unsrtnat}
    \bibliography{literature}{}
    
\end{document}

文献资料

@misc{mynaviEneplat2022,
    title = {\begin{CJK*}{UTF8}{MS Mincho}自家発電・自家消費を促進するパナソニックの{V2H蓄電システム}「eneplat」\end{CJK*}},
    howpublished = {\url{https://news.mynavi.jp/article/20221205-panasonic/}},
    language = {ja},
    urldate = {2023-08-02},
    note = {Accessed: 2023-08-02},
    journal = {\begin{CJK*}{UTF8}{MS Mincho}マイナビニュース\end{CJK*}},
    author = {\begin{CJK*}{UTF8}{MS Mincho}{諸山泰三}\end{CJK*}},
    month = dec,
    year = {2022},
}

在尝试此操作之前,请删除临时的 .bbl 和 .aux 文件,以便 LaTeX / PDFLaTeX 能够正确地重新创建它们。另外,请确保您的 .tex 和 .bib 是 UTF-8 格式(例如,使用 Notepad++ 检查),但通常情况下,应该已经是这种情况了。

结果: 使用 CJKutf8 的参考书目/bibtex 中的日语文本

相关内容