bibtex/biblatex 中的大小写保存

bibtex/biblatex 中的大小写保存

我落后了忠诚的作家,这是一个具有 Latex 导出功能的开源在线编辑器。

我最近把我们的 bib(la)tex 导入器/导出器变成了一个独立的包(链接在这里) 应该可以在其他在线项目中使用。

至少有一件事我们似乎无法弄清楚: 中大小写保留的具体规则是什么biblatex

我们查看了biblatex手册,其中提到了牙套。但正如 Emiliano Heyns 指出的那样,在某些情况下,上述牙套不会产生这种效果。据我所知,规则如下:

  1. 紧跟“\”的左括号将被忽略。相应的右括号也是如此。因此,在以下情况下,大小写不会被保留:

    {\textbf{...}}
    

    也不

    {\textbf{...}....}
    
  2. 紧接着的两个左括号\会被接受。例如,以下情况被保留:

    {{\textbf{...}}}
    

    {{\textbf{...}....}}
    
  3. 一个左括号后面跟着除此以外的任何字符\。因此,在这种情况下,情况得以保留:

    {...}
    

    {{...}}
    

    {...\textbf{...}}
    

这些是确切的规则吗?或者比这更复杂?

答案1

biblatex的大小写转换与 BibTeX 的大小写转换不同,是在 LaTeX 级别实现的。不幸的是,这种大小写转换真的在 LaTeX 方面很难做到正确。随着时间的推移,已经有了一些显著的改进,但宏仍然不是理想的,不幸的是,它是目前最好的(如果有人对改进 LaTeX 实现的\MakeSentenceCase,请访问https://github.com/plk/biblatex/issues来讨论事情)。特别是下面的一些“规则”不是设计出来的,而是实施和其怪癖的结果。

规则如下

  1. 首字母转换为大写。所有后续字母均转换为小写。(假设无保护。请参阅51
  2. 处于非初始位置
    1. 括号组通常可防止大小写更改,这包括宏参数的括号组。请参阅53以及01
    2. 以宏开头的具有一层外括号的组是不是避免大小写变化。参见6102,但比较03等等。等等。

这看起来很容易,对吧?保护标题的方法如下:使用一层括号 ( ) 保护内容免受大小写变化的影响。通过将整个宏包裹在一层括号 ( )A Short Grammar of {Greek}中来取消对宏参数的保护。Why {\emph{Brontosaususes}} are cool.

如果我们处理初始单词,就会出现问题行为。

  1. 首字母始终大写。请参阅51
  2. 可以使用括号组来保护首字母不大写。请参阅52
  3. 如果首字母由以宏开头的一级括号组组成,则整个组将大写。请参阅1231

因此,一旦需要处理起始单词,事情就会变得一团糟。用宏来保护标题很容易(请参阅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}

在此处输入图片描述

此答案指的是biblatex3.11 和 Biber 2.11。在旧版本的biblatex句子大小写宏中,有一些错误,这些错误已在不久前得到解决。一些较旧的 Biber 版本会过于激进地删除标题中的括号,现在情况已不再如此。因此,如果您获得不同的结果,请检查您的biblatex和 Biber 版本。

相关内容