我希望更新我的 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++ 检查),但通常情况下,应该已经是这种情况了。