我尝试编辑从 standard.bbx 复制的 bibmacro。但是没有成功。另一个解决方案是将 Titlept 的内容复制到 Title 中,但是 Biblatex 文档在这方面对我来说似乎很笨拙。
这是我的尝试:
\renewbibmacro{maintitle+title}{%
\iffieldundef{titlept}{ % if titlept is undefined
\iffieldsequal{maintitle}{title}
{\clearfield{maintitle}%
\clearfield{mainsubtitle}%
\clearfield{maintitleaddon}}
{\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield{volume}%
\printfield{part}%
\setunit{\addcolon\space}}}}}
{\printfield{titlept}}%
\usebibmacro{title}%
\newunit}
答案1
使用 biber+biblatex 可以轻松实现这一点,它允许您在读取时重新映射数据源,而无需更改源本身。将其放入您的 biber.conf 中(有关更多详细信息和示例,请参阅 Biber 手册第 3.1.1 节):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" bmap_overwrite="1">
<map>
<map_step map_field_source="TITLEPT" map_field_target="TITLE"/>
</map>
</maps>
</sourcemap>
</config>
TITLE
如果字段也存在,这将覆盖该字段。如果TITLE
字段不存在,bmap_overwrite="0"
则仅重命名该字段,请使用。
答案2
这里的问题是,您不能使用titlept
作为自定义字段名称。您必须使用 定义的字段。例如,biblatex
您可以使用。否则无法识别您的输入字段。usera
biblatex
例子:
\documentclass{article}
\usepackage[
backend=biber,
]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book {foo,
author = {Foo, Francis},
usera = {My custom title},
title = {All about Foo},
year = {2011},
location = {Footown},
}
@book {bar,
author = {Bar, Bernie},
title = {Barstory},
year = {2000},
location = {Barcity},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\renewbibmacro{maintitle+title}{%
\iffieldundef{usera}{ % if usera is undefined
\iffieldsequal{maintitle}{title}
{\clearfield{maintitle}%
\clearfield{mainsubtitle}%
\clearfield{maintitleaddon}}
{\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield{volume}%
\printfield{part}%
\setunit{\addcolon\space}}}}}
{\printfield{usera}\newunit\newblock}%
\usebibmacro{title}%
\newunit}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
有关自定义字段的更多信息,biblatex
请参阅手册第 2.2.4 节。
目前支持以下自定义字段:
name[a–c]
列表(名称)
特殊书目样式的自定义列表。标准书目样式不使用。name[a–c]type
字段(键)
与authortype
和类似,editortype
但引用字段name[a-c]
。标准书目样式不使用。list[a–f]
列表(文字)
特殊书目样式的自定义列表。标准书目样式不使用。user[a–f]
字段(文字)
特殊书目样式的自定义列表。标准书目样式不使用。verb[a–c]
字段(文字)与上面的自定义字段类似,但这些是逐字字段。标准书目样式不使用它们。
答案3
我不得不使用 Thorsten 建议的自定义字段更新一些宏,而且效果非常好。我最终得到了类似下面的代码。稍后我将发布完整的文档工作并通知您。我不得不将用户 [a] 带到 [d],替换标题、系列、注释和地址字段。
\renewbibmacro{maintitle+title}{%
\iffieldundef{usera}{ % if the translation is not available...
\iffieldsequal{maintitle}{title} % it prints the title macro,
{\clearfield{maintitle}%
\clearfield{mainsubtitle}%
\clearfield{maintitleaddon}}
{\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield{volume}%
\printfield{part}%
\setunit{\addcolon\space}}}}
\usebibmacro{title}
}
{\printfield{usera}}% Otherwise, it prints the translation.
\newunit}
和
\newbibmacro{series+number}{%
\iffieldundef{userb}{
\printfield{series}%
\setunit*{\addspace}%
\printfield{number}%
\newunit}
{\printfield{userb}}}
非常感谢您的帮助。我希望回报社区。