biblatex 和 biber 出现“缺少字符”或“未映射到 ascii”消息

biblatex 和 biber 出现“缺少字符”或“未映射到 ascii”消息

我开始在这里起草一个问题,但后来通过进一步的工作,找到了解决方案。我认为可能值得将我在这里找到的内容发布出来供其他人参考。

问题与使用biber后端有关。这至少在一定程度上也是使用某些出版商提供的未经修改的引文biblatex的结果。运行 时,我会收到一系列如下所示的错误:BibTeXbiber

"\x{fffd}" does not map to ascii at Biber/Output/BBL.pm line 422.

我使用的参考文件已经包含约 100 个参考,因此整理这些参考并不容易(第 422 行,没有引用我的参考文件中的行)。此问题的一个明显解决方案是-U在运行 biber(biber -U Thesis_1对于名为的项目Thesis_1)时使用开关。这将启用扩展的 unicode 字符集。但是,结果发现使用诸如 之类的命令创建的特殊字符(\"{u}为了生成带有变音符号的“u”)不会出现在 pdf 中。在 pdflatex 的日志文件中,以下消息的实例:

Missing character: There is no à in font ptmr7t!

会出现(使用-U中的开关biber,但没有开关则不会出现)。似乎打开对 unicode 字符的接受也会关闭它们在 latex 中用 ascii 表示的方式。

我从阅读其他论坛消息中得知,类似错误消息可能还有其他原因,但我将把此实例的解决方案作为答案。如果有人认为可以修改问题以使其更有帮助,请告诉我。

由于我被要求,这里有一个最小的工作示例:

\documentclass{article}

\usepackage[sorting=none,
           %style=chem-rsc,
           backend=biber,
           ]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{theRefs.bib}
@ARTICLE{Bhalla2000,
  author = {Bhalla, A. S. and Guo, R. and Roy, R.},
  title = {The perovskite structure – a review of its role in ceramic science
    and technology},
  journal = {Materials Research Innovations},
  year = {2000},
  volume = {4},
  pages = {3-26},
}
\end{filecontents}

\addbibresource{theRefs.bib}

\begin{document}
    Here is a reference\cite{Bhalla2000}
    \printbibliography{}
\end{document}

答案1

使用 biber 选项可能对您更有用--output_safechars。这会在编写时将所有 UTF-8 转换为 LaTeX 宏。biber PDF 手册解释了使用 PDFLaTeX 和 inputenc 时可能遇到的编码/解码问题。如果您遇到更多问题,查看biblatex 调用以及文件中的和值.bbl会很有用。usepackagebblencodingbibencoding.bcf

实际上,你的问题可能通过添加来解决

\usepackage[utf8]{inputenc}

到您的 MWE。否则,您的 PDFLaTeX 未设置为处理任何 UTF-8 字符。有了这个,您只需要运行而biber无需额外选项。但是,inputenc不支持所有字符,例如{\u{\i}}不支持(截至 TeXlive 2012)。

答案2

因此,我发现,尽管我的参考文件不是 Unicode,但文件中有许多字符属于 ANSI 字符集,而不是 ASCII 集。换句话说,它们包含编号在 128 到 255 之间的字符。这些包括以下符号:

  • “-”(字符 150 或 0x96),是连字符的变体
  • “°”(字符 176 或 0xb0),表示度数符号
  • “ ”(字符 160 或 0xa0),称为无分隔符

在 LaTeX 中,使用 ASCII 字符集,您可以用 来表示连字符---或者---根据您想要的标记类型,$^\circ$用 来表示程度和~非换行空格。

我的解决方案是首先找到文件中所有值在 128 到 255 之间的字符。使用可以搜索正则表达式的文本编辑器,以下搜索词就足够了:[€-ÿ]。您应该能够通过按住Alt并键入0128数字键盘(Alt0255最后一个字符)来使用键盘手动生成特殊字符。然后手动浏览并将所有 ANSI 字符更改为 ASCII 中的 LaTeX 表示。

希望这是明智的并且有意义的。

我会暂时将这个问题保留为未接受状态,以防其他人希望提出更好的解决方案。

相关内容