我落后了忠诚的作家,这是一个具有 Latex 导出功能的开源在线编辑器。
我最近把我们的 bib(la)tex 导入器/导出器变成了一个独立的包(链接在这里) 应该可以在其他在线项目中使用。
至少有一件事我们似乎无法弄清楚: 中大小写保留的具体规则是什么biblatex
?
我们查看了biblatex
手册,其中提到了牙套。但正如 Emiliano Heyns 指出的那样,在某些情况下,上述牙套不会产生这种效果。据我所知,规则如下:
紧跟“\”的左括号将被忽略。相应的右括号也是如此。因此,在以下情况下,大小写不会被保留:
{\textbf{...}}
也不
{\textbf{...}....}
紧接着的两个左括号
\
会被接受。例如,以下情况被保留:{{\textbf{...}}}
和
{{\textbf{...}....}}
一个左括号后面跟着除此以外的任何字符
\
。因此,在这种情况下,情况得以保留:{...}
和
{{...}}
和
{...\textbf{...}}
这些是确切的规则吗?或者比这更复杂?
答案1
biblatex
的大小写转换与 BibTeX 的大小写转换不同,是在 LaTeX 级别实现的。不幸的是,这种大小写转换真的在 LaTeX 方面很难做到正确。随着时间的推移,已经有了一些显著的改进,但宏仍然不是理想的,不幸的是,它是目前最好的(如果有人对改进 LaTeX 实现的\MakeSentenceCase
,请访问https://github.com/plk/biblatex/issues来讨论事情)。特别是下面的一些“规则”不是设计出来的,而是实施和其怪癖的结果。
规则如下
- 首字母转换为大写。所有后续字母均转换为小写。(假设无保护。请参阅
51
) - 处于非初始位置
- 括号组通常可防止大小写更改,这包括宏参数的括号组。请参阅
53
以及01
。 - 但以宏开头的具有一层外括号的组是不是避免大小写变化。参见
61
和02
,但比较03
等等。等等。
- 括号组通常可防止大小写更改,这包括宏参数的括号组。请参阅
这看起来很容易,对吧?保护标题的方法如下:使用一层括号 ( ) 保护内容免受大小写变化的影响。通过将整个宏包裹在一层括号 ( )A Short Grammar of {Greek}
中来取消对宏参数的保护。Why {\emph{Brontosaususes}} are cool.
如果我们处理初始单词,就会出现问题行为。
- 首字母始终大写。请参阅
51
。 - 可以使用括号组来保护首字母不大写。请参阅
52
。 - 如果首字母由以宏开头的一级括号组组成,则整个组将大写。请参阅
12
和31
。
因此,一旦需要处理起始单词,事情就会变得一团糟。用宏来保护标题很容易(请参阅11
),但实际上不能用宏来开始标题并获得与没有宏时相同的输出。唯一的解决方法是将宏的参数拆分为第一个单词,然后由参数括号隐式保护该单词,然后用附加组取消对其余单词的保护,请参阅23
。这非常不令人满意,但这是我目前能提供的最好的方法。
请注意,某些自定义biblatex
样式可能会将冒号后的下一个单词视为首字母单词。
平均能量损失
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{01,
author = {Test01, Anne},
title = {Lorem \emph{Ipsum dolor Sit ABC amet} Consectur},
date = {1981},
}
@book{02,
author = {Test02, Anne},
title = {Lorem {\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1982},
}
@book{02b,
author = {Test02b, Anne},
title = {Lorem {s\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1982},
}
@book{02c,
author = {Test02c, Anne},
title = {Lorem {S\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1982},
}
@book{02d,
author = {Test02d, Anne},
title = {Lorem {{}\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1982},
}
@book{03,
author = {Test03, Anne},
title = {Lorem {{\emph{Ipsum dolor Sit ABC amet}}} Consectur},
date = {1983},
}
@book{04,
author = {Test04, Anne},
title = {Lorem {{{\emph{Ipsum dolor Sit ABC amet}}}} Consectur},
date = {1984},
}
@book{11,
author = {Test11, Anne},
title = {\emph{Ipsum dolor Sit ABC amet} Consectur},
date = {1991},
}
@book{12,
author = {Test12, Anne},
title = {{\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1992},
}
@book{12a,
author = {Test12a, Anne},
title = {{s\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1992},
}
@book{12b,
author = {Test12b, Anne},
title = {{{}\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1992},
}
@book{13,
author = {Test13, Anne},
title = {{{\emph{Ipsum dolor Sit ABC amet}}} Consectur},
date = {1993},
}
@book{14,
author = {Test14, Anne},
title = {{{{\emph{Ipsum dolor Sit ABC amet}}}} Consectur},
date = {1993},
}
@book{21,
author = {Test21, Anne},
title = {{}\emph{Ipsum dolor Sit ABC amet} Consectur},
date = {1994},
}
@book{22,
author = {Test22, Anne},
title = {{}{\emph{Ipsum dolor Sit ABC amet}} Consectur},
date = {1995},
}
@book{23,
author = {Test23, Anne},
title = {\emph{Ipsum }{\emph{dolor Sit ABC amet}} Consectur},
date = {1995},
}
@book{31,
author = {Test31, Anne},
title = {{\em Ipsum dolor Sit ABC amet\/} Consectur},
date = {1931},
}
@book{32,
author = {Test32, Anne},
title = {{{\em Ipsum dolor Sit ABC amet\/}} Consectur},
date = {1931},
}
@book{51,
author = {Test51, Anne},
title = {lOrem Ipsum},
date = {1951},
}
@book{52,
author = {Test52, Anne},
title = {{lorem} Ipsum},
date = {1952},
}
@book{53,
author = {Test53, Anne},
title = {{{lorem}} Ipsum},
date = {1953},
}
@book{54,
author = {Test54, Anne},
title = {Lorem {Ipsum dolor Sit ABC amet} Consectur},
date = {1981},
}
@book{61,
author = {Test61, Anne},
title = {Lorem {\relax Ipsum Dolor ABC sit amet} sit},
date = {1961},
}
@book{62,
author = {Test62, Anne},
title = {Lorem {{\relax Ipsum Dolor ABC sit amet}} sit},
date = {1962},
}
@book{63,
author = {Test63, Anne},
title = {Lorem {{{\relax Ipsum Dolor ABC sit amet}}} sit},
date = {1963},
}
@book{64,
author = {Test64, Anne},
title = {Lorem {{{{\relax Ipsum Dolor ABC sit amet}}}} sit},
date = {1964},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
此答案指的是biblatex
3.11 和 Biber 2.11。在旧版本的biblatex
句子大小写宏中,有一些错误,这些错误已在不久前得到解决。一些较旧的 Biber 版本会过于激进地删除标题中的括号,现在情况已不再如此。因此,如果您获得不同的结果,请检查您的biblatex
和 Biber 版本。