- 我想使用自定义名称为了标题的参考书目/参考文献。
- 显然关闭方括号
]
会导致问题。 - 我使用语法
\printbibliography[title = ...]
。 - 用括住标题字符串
{}
似乎并不能解决问题。 - 仅
title = Test [Test{]}
看似有效。 - 问题:为什么会这样?解决这个问题的最佳实践(预期方法)是什么?
\documentclass[]{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{westfahl:space}.
\printbibliography[title = Test [Test]] % "{Test [Test]}" does not work. "Test [Test{]}" does work.
\end{document}
答案1
由于@moewe说他目前没有太多时间,我很好奇,所以我做了一些调查。请注意,我确实不是为了进行深入研究,我阅读了很多源代码,所以我不确定这是否是唯一的问题,但简而言之,这就是发生的事情(很多跳过):
key-val 解析器去掉第一对括号(这是有意为之,通常不会造成危害)。
键的值
title
(如果使用)将作为可选参数转发给\blx@head@bibliography
宏。问题就在这里,所做的是(作为键<title>
的参数title
):\ifblank{<title>} {\csuse{blx@head@bibliography}} {\csuse{blx@head@bibliography}[<title>]}
并且
\blx@head@bibliography
宏通过使用来抓取其可选参数而不检查括号是否匹配(几乎所有宏都是这样做的)\@protected@testopt
,因此中的右括号会过早<title>
停止参数抓取。\blx@head@bibliography
\blx@head@bibliography
请注意,这是内部使用方式的一个错误。而不是这样做
\ifblank{<title>}
{\csuse{blx@head@bibliography}}
{\csuse{blx@head@bibliography}[<title>]}
biblatex
应该做的
\ifblank{<title>}
{\csuse{blx@head@bibliography}}
{\csuse{blx@head@bibliography}[{<title>}]}
(请注意附加的括号)