根据《芝加哥格式手册》第 16 版,参考文献列表中的标题现在应采用标题大小写格式,而不是句子大小写。但据我所知,BibLaTeX-chicago (0.9.9b) 似乎不会自动更改.bib
-entries 的大小写。
有没有什么方法(当然,除了为每个条目手动执行此操作)可以让 BibLaTeX-chicagotitle
在所有条目类型的条目字段中使用标题大小写(无论标题在字段中的格式如何.bib
)?
以下是 MEW:
\documentclass[12pt, a4paper]{article}
\usepackage[authordate,strict,backend=biber, cmsdate=old]{biblatex-chicago}
\begin{filecontents}{bibsample2.bib}
@BOOK{Smith2003,
title = {This is the book title},
publisher = {Penguin},
year = {2003},
author = {Smith, James},
address = {London},
}
@ARTICLE{Doe1970,
author = {Doe, John J.},
title = {this is the article title},
journal = {Great Journal},
year = {1970},
volume = {40},
pages = {207-234},
}
\end{filecontents}
\addbibresource{bibsample2.bib}
\begin{document}
\autocite{Smith2003}
\autocite{Doe1970}
\printbibliography
\end{document}
因此,我希望这些标题的拼写为
这是书名
这是文章标题
在输出中。
我正在使用最新版本的 BibLaTeX (2.5)、Biber (1.5) 和 BibLaTeX-chicago (0.9.9b)。
非常感谢任何指点。
答案1
任何自动解决方案都很难打败精通芝加哥格式手册的标题样式大写规则。因此,您最好手动格式化源文件中的标题。每当文档语言或参考书目格式要求句子样式大写时,使用 biblatex 的\MakeSentenceCase
宏。
也就是说,您可以编写一个新的宏,例如\MakeHeadlineCase
,并将其应用于标题格式指令。另一种方法是使用 biber 的sourcemap
选项。它支持正则表达式并在 biblatex 看到字段之前修改字段,这意味着该解决方案完全独立于样式。
以下源映射实现了标题样式大写的粗略近似。它使用 biber 配置文件的 XML 语法biber.conf
。您还可以使用 biblatex 命令在文档前言中指定源映射\DeclareSourcemap
。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_source="TITLE"
map_match="(^|\s)(\w+\S*w*)" map_replace="$1\u\L$2"/>
<map_step map_field_source="TITLE"
map_match="\-(\w+)" map_replace="\-\u\L$1"/>
<map_step map_field_source="TITLE"
map_match="(\s+|\-)(A(|n|nd|s|t)|F(or|rom)|I(n|s)|O(f|n|r)|T(he|o)|With)\b"
map_replace="$1\L$2"/>
<map_step map_field_source="TITLE"
map_match="([:;]\s+)([a-z])" map_replace="$1\u$2"/>
</map>
</maps>
</sourcemap>
</config>
前两个步骤将字符串开头 ( ^
)、空格 ( \s
) 后或连字符 ( \-
) 后的单词大写。第三个映射将空格或连字符后的选定单词小写。最后一个映射将冒号或分号 ( [:;]
) 后的单词大写。
这是一个独立的例子。
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{biber.conf}
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_source="TITLE"
map_match="(^|\s)(\w+\S*w*)" map_replace="$1\u\L$2"/>
<map_step map_field_source="TITLE"
map_match="\-(\w+)" map_replace="\-\u\L$1"/>
<map_step map_field_source="TITLE"
map_match="(\s+|\-)(A(|n|nd|s|t)|B(ut|y)|F(or|rom)|I(n|s)|O(f|n|r)|T(he|o)|With)\b"
map_replace="$1\L$2"/>
<map_step map_field_source="TITLE"
map_match="([:;]\s+)([a-z])" map_replace="$1\u$2"/>
</map>
</maps>
</sourcemap>
</config>
\end{filecontents*}
\begin{filecontents*}{\jobname.bib}
@BOOK{Smith2003,
title = {This is an off-the-hook book title, but it doesn't have a subtitle},
publisher = {Penguin},
year = {2003},
author = {Smith, James},
address = {London}}
@ARTICLE{Doe1970,
author = {H{\"a}user, {\O}rnulf},
title = {{\O}rnulf H{\"a}user's letter to the editor: an $\alpha$-to-$\omega$
summary of $\epsilon$--improvement},
journal = {Great Journal},
year = {1970},
volume = {40},
pages = {207-234}}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}