我的参考列表中有一些条目,其标题包含\langle
和\rangle
符号,类似于以下 MWE 中的条目:
\begin{filecontents}{\jobname.bib}
@BOOK{test,
author = {A. Uthor},
title = {A title with some $\langle \Psi \rangle $ stuff},
year = {2014},
publisher = {A Company}
}
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
如果我处理这个 MWEpdflatex
并且输出中缺少 s 和 s 并且 `pdflatex 日志biber
文件\langle
说\rangle
包 inputenc 错误:Unicode 字符 \u8:⟨ 未设置为用于 LaTeX。
和
包 inputenc 错误:Unicode 字符 \u8:⟩ 未设置为用于 LaTeX。
我已经尝试过Revtex - 在脚注中使用数学没有任何成功。查看.bbl
biber 生成的文件时发现,标题字段如下所示:
\field{title}{A title with some $⟨\Psi ⟩$ stuff}
因此显然 biber 本身已经分别用和替换了\langle
和\rangle
命令,但这些命令与 不兼容。⟨
⟩
inputenc
根据biblatex
手册,我可以设置safeinputenc
包选项,指示biber
尝试将所有 utf8 编码的内容转换为 ASCII。这可以解决上述问题,但它也会给我带来其他条目的新麻烦,因为一些转换biber
尝试导致错误的结果。
那么是否存在我没有看到的第三种方法,或者我可能遇到了错误,biber
因为它的转换⟨
是⟩
错误的?
答案1
我不确定这是否适用于所有情况 - 但对我使用的情况和上述情况确实有效。来自biber
帮助页面:
--decodecharsset=[recode set name] The set of characters included in the conversion routine when decoding LaTeX macros into UTF-8 (which happens when --bblencoding|-E is set to UTF-8). Set to "full" to try harder with a much larger set or "base" to use a smaller basic set. Default is "base". You may want to try "full" if you have less common UTF-8 characters in your data source. The recode sets are defined in the reencoding data file which can be customised. See the --recodedata option and the PDF manual.
然而,我不知道为什么这在这种情况下有效,但如果你运行
biber --decodecharsset=full <main[.bcf]>
而不是写作
\field{labeltitle}{A title with some $⟨\Psi ⟩$ stuff}
\field{title}{A title with some $⟨\Psi ⟩$ stuff}
它将main.bbl
写入所需的
\field{labeltitle}{A title with some $\langle \Psi \rangle$ stuff}
\field{title}{A title with some $\langle \Psi \rangle$ stuff}
因此 latex 不会抱怨不认识字符。如果数据库中有几个未知字符,这可能会更有用。
答案2
看来 Biber 试图比 LaTeX 更聪明。;-) 也许有一种 BibLaTeX/Biber 方法,但解决方法很容易找到。我们只是定义inputenc
不知道的字符。
\begin{filecontents}{\jobname.bib}
@BOOK{test,
author = {A. Uthor},
title = {A title with some $\langle \Psi \rangle $ stuff},
year = {2014},
publisher = {A Company},
}
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{newunicodechar}
\newunicodechar{⟨}{\langle}
\newunicodechar{⟩}{\rangle}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}