![biblatex:关闭方括号会导致参考书目/参考文献标题名称(标题)(章节名称或部分名称)出现问题](https://linux22.com/image/405937/biblatex%EF%BC%9A%E5%85%B3%E9%97%AD%E6%96%B9%E6%8B%AC%E5%8F%B7%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%8F%82%E8%80%83%E4%B9%A6%E7%9B%AE%2F%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE%E6%A0%87%E9%A2%98%E5%90%8D%E7%A7%B0%EF%BC%88%E6%A0%87%E9%A2%98%EF%BC%89%EF%BC%88%E7%AB%A0%E8%8A%82%E5%90%8D%E7%A7%B0%E6%88%96%E9%83%A8%E5%88%86%E5%90%8D%E7%A7%B0%EF%BC%89%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
- 我想使用自定义名称为了标题的参考书目/参考文献。
- 显然关闭方括号
]
会导致问题。 - 我使用语法
\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>}]}
(请注意附加的括号)