我的论文有一套相当复杂的引用要求。我的参考文献有多种语言(俄语、日语、中文),其中作者姓名的音译、标题的翻译等需要与原文并列。我需要使用脚注引用,其中第一次使用参考文献时在脚注中显示完整参考文献,而同一页面上的后续使用则显示同上。后续页面的第一次使用将使用较短的参考文献。我还想自定义名称的顺序:
西方——最终参考文献列表中按姓氏、名字的顺序排列;脚注中按名字、姓氏的顺序排列。
东方- 最终参考列表和脚注中的姓氏、名字的顺序。
我在文件中设置了一个额外的字段.bib
,指定哪些条目是西方的,哪些条目是东方的(字段名称是oriental
)。
verbose-inote
里面的样式biblatex
可以帮我实现部分功能,但我必须进行修改。我最近发现了 Bibulous,它看起来非常有吸引力,因为它使我能够非常轻松地精确指定我希望事情如何工作。Bibulous 可以用来生成像 提供的脚注引用吗verbose-inote
?如果可以,是否可以为脚注引用和最终参考列表指定不同的样式?
虽然我很想看到 Bibulous 的解决方案,但biblatex
如果尚不存在解决方案,修改解决方案可能比尝试在 Bibulous 中实现脚注引用更容易。我正在使用 XeLaTeX。名称(作者/编辑)问题是问题所在 - 标题和出版商可以正常工作。示例 .bib 引用如下:
@Book{Sofronov:Grammar,
title = {{Grammar of the Tangut Language, 2 volumes }{\russian Грамматика Тангутского Языка}},
author = {\noopsort{Sofronov}Sofronov, {\russian М.В. Софронов}, M.V.},
publisher = {Scientific Publishing House {\russian Издательство ``наука''}},
address = {Moscow},
year = {1968}
}
@Book{LiFanwen:1997,
editor = {\noopsort{Li}Li, {\chinese 李范文}, Fanwen},
title = {Tangut-Chinese Dictionary {\chinese 夏漢字典}},
publisher = {China Social Science Press {\chinese 中国社会科学出版社}},
address = {Beijing, China},
year = 1997,
oriental = 1
}
我计划使用东方领域来确定名字/姓氏的排序方式。
目前,我将作者的原名放在三元素名称的中间,因此我可以使用 来访问它#7
。
我在某处读到,我需要将东方领域映射到一个预先存在的字段名称,我在文件顶部执行此操作.tex
:
\usepackage[backend=biber, style=verbose-inote]{biblatex}
\addbibresource{xixia.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldset=oriental, fieldvalue=0]
\step[fieldsource=oriental]
\step[fieldset=usera, origfieldval, append]
}
}
}
\usepackage{fontspec}
\newfontface\russian{Times New Roman}
\newfontface\chinese{AR PL UMing CN}
不知道接下来该做什么。我一直在尝试添加\DeclareNameFormat
类似verbose-inote.cbx
下面的内容(此代码不起作用):
\DeclareNameFormat{author-with-orig}{%
\ifnumcomp{\thefield{usera}}{=}{1}
{#1%
\ifblank{#3}{}{\addcomma\space #3 \space #7}}
{\ifblank{#3}{}{#3\space}%
#1 \space #7}%
\ifthenelse{\value{listcount}<\value{liststop}}
{\addcomma\space}
{}}
然后修改中的以下两个条目verbose-inote.cbx
以引用author-with-orig
:
\newbibmacro*{cite:full}{%
\usebibmacro{cite:full:citepages}%
\printtext[bibhypertarget]{%
\usedriver
{\DeclareNameAlias{sortname}{author-with-orig}}
{\thefield{entrytype}}}%
\usebibmacro{shorthandintro}}
\newbibmacro*{footcite:full}{%
\usebibmacro{cite:full:citepages}%
\printtext[bibhypertarget]{%
\usedriver
{\DeclareNameAlias{sortname}{author-with-orig}}
{\thefield{entrytype}}}%
\usebibmacro{shorthandintro}}
MWE 如下(为了简单起见,我省略了外语标题、出版商等,因为它们很好用):
\documentclass[a4paper]{report}
\usepackage{fontspec}
\newfontface\russian{Times New Roman}
\newfontface\chinese{AR PL UMing CN}
\usepackage{filecontents}
\begin{filecontents*}{xixia.bib}
@Book{NonOrientalBook,
title = {Non-Oriental Book},
author = {NonOrientalLast, {\russian Имя}, NonOrientalFirst},
publisher = {Non-Oriental Book Publisher},
address = {Moscow},
year = 1968
}
@Book{OrientalBook,
editor = {OrientalLast, {\chinese 名字}, OrientalFirst},
title = {Oriental Book},
publisher = {Oriental Book Publisher},
address = {Beijing},
year = 1997,
oriental = 1
}
\end{filecontents*}
\usepackage[backend=biber, style=verbose-inote]{biblatex}
\addbibresource{xixia.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldset=oriental, fieldvalue=0]
\step[fieldsource=oriental]
\step[fieldset=usera, origfieldval, append]
}
}
}
\begin{document}
A book by a non-oriental author\footcite{NonOrientalBook}. A document by an oriental author\footcite{OrientalBook}.
\newpage
\printbibliography
\end{document}
脚注应为:
1. NonOrientalFirst NonOrientalLast Имя ... (title, publisher, etc.)
2. OrientalLast OrientalFirst 名字 ...
参考书目应包含:
NonOrientalLast NonOrientalFirst Имя ...
OrientalLast OrientalFirst 名字 ...
答案1
我没能使用我计划使用的东方字段(我不知道如何在\DeclareNameFormat
代码中访问此信息),但我设法想出了一个解决方案,即XXXORI
在东方作者的姓氏前添加一个代码并使用该xstring
包。我还在下面的代码中添加了额外的作者,以测试多位作者的工作方式。
\documentclass[a4paper]{report}
\usepackage{fontspec}
\newfontface\russian{Times New Roman}
\newfontface\chinese{AR PL UMing CN}
\usepackage{filecontents}
\usepackage{xstring}
\usepackage{intcalc}
\begin{filecontents*}{xixia.bib}
@Book{NonOrientalBook,
title = {Non-Oriental Book},
author = {NonOrientalLast, {\russian Имя}, NonOrientalFirst and NonOrientalLast2, {\russian Имя2}, NonOrientalFirst2},
publisher = {Non-Oriental Book Publisher},
address = {Moscow},
year = 1968
}
@Book{OrientalBook,
editor = {XXXORIOrientalLast, {\chinese 名字}, OrientalFirst and XXXORIOrientalLast2, {\chinese 名字2}, OrientalFirst2 and XXXORIOrientalLast3, {\chinese 名字3}, OrientalFirst3},
title = {Oriental Book},
publisher = {Oriental Book Publisher},
address = {Beijing},
year = 1997
}
\end{filecontents*}
\usepackage[backend=biber, style=verbose-inote]{biblatex}
\addbibresource{xixia.bib}
\DeclareNameFormat{author-with-orig}{%
\IfSubStr{#1}{XXXORI}
{\StrGobbleLeft{#1}{6}\space#3#7}
{#3\space#1#7}
\ifthenelse{\value{listcount}=\intcalcDec{\value{liststop}}}
{and\space}
{\ifthenelse{\value{listcount}<\value{liststop}}
{\addcomma\space}
{}}}
\DeclareNameFormat{sortname}{%
\IfSubStr{#1}{XXXORI}
{\StrGobbleLeft{#1}{6}\space#3#7}
{\ifthenelse{\value{listcount}=1}
{#1\addcomma\space#3#7}
{#3\space#1#7}}
\ifthenelse{\value{listcount}=\intcalcDec{\value{liststop}}}
{and\space}
{\ifthenelse{\value{listcount}<\value{liststop}}
{\addcomma\space}
{}}}
\renewbibmacro*{footcite:full}{%
\usebibmacro{cite:full:citepages}%
\printtext[bibhypertarget]{%
\usedriver
{\DeclareNameAlias{sortname}{author-with-orig}}
{\thefield{entrytype}}}%
\usebibmacro{shorthandintro}}
\begin{document}
A book by a non-oriental author\footcite{NonOrientalBook}. A document by an oriental author\footcite{OrientalBook}.
\newpage
\printbibliography
\end{document}