我的问题与以下问题类似但又不同:如何修复包 inputenc 错误:“Unicode 字符 \u8:� 未设置为用于 LaTeX。”?
我正在使用 TexLive 和 Texmaker 以及 elsarticle.cls 文档类。文档类需要使用 Bibtex 来引用参考文献。由于一些参考文献是俄语,因此序言中的内容如下:
\usepackage[T1,T2A]{fontenc}% Russian language support
\usepackage[utf8]{inputenc}
%% `Elsevier LaTeX' style
\bibliographystyle{elsarticle-num}
.tex 文件和 .bib 文件均采用 UTF8 编码(在 Mac 的终端中使用命令 file -I (filename))。出于某种原因,在编译文档时,.bbl 文件采用未知编码。尝试声明 unicode 字符
\DeclareUnicodeCharacter{2013}{\textendash}
对抛出的错误消息没有影响:
! Package inputenc Error: Unicode char \u8:�. not set up for use with LaTeX.See the inputenc package documentation for explanation.Type H <return> for immediate help.... �.
错误的行号与生成的.bbl 文件的行号相匹配。
其他线索是,只有在使用 pdflatex、bibtex 和 pdflatex 编译文档时,才会发生错误。此外,如果注释掉包含俄罗斯西里尔字母的 .bib 文件,则不会发生错误。我的 Mac 上的终端的最后一个线索 file -I (filename) 表明,在使用报告文档类中的另一个文档时,.bbl 文件采用 utf8 格式,并使用:
\bibliographystyle{unsrt}
有人对解决这个问题或潜在的修复有什么建议吗?
为了给自己举个例子,只需从这里下载 elsarticle 模板:
并将其添加到 bib 文件中:
@book{aizenshtata_features_1952,
address = {Ленинград},
series = {Главное управление гидрометеорологической службы при Совете Министров СССР. Труды Ташкентской геофизической обсерватории Вып. 6 (7)},
title = {Some features of the heat balance of the sandy desert (in {Russian}: Некоторые черты теплового баланса песчаной пустыни)},
abstract = {На обл. только загл. серии, Библиогр.: с. 54-55 (36 назв.)},
language = {rus},
publisher = {Гидрометеоиздат},
author = {Айзенштат, Борис Абрамович},
collaborator = {Зуев, М. В.},
year = {1952},
note = {pgs 3-55},
keywords = {Пустыни песчаные -- Тепловой баланс},
file = {3122870.pdf:/Users/nkampy/Library/Application Support/Zotero/Profiles/f12p038d.default/zotero/storage/PRG79WIE/3122870.pdf:application/pdf}
}
@book{kondratyev_transfer_1950,
address = {Москва; Ленинград},
title = {Transfer of long-wave radiation in the atmosphere (in Russian: Перенос длинноволнового излучения в атмосфере)},
abstract = {Библиогр.: с. 285-287 (71 назв.)},
language = {rus},
publisher = {Госизд-во техн-теоретлит},
author = {Кондратьев, Кирилл Яковлевич},
year = {1950},
keywords = {Атмосфера -- Лучистый теплообмен -- Определение, Тепловое излучение, длинноволновое -- Перенос и поглощение в атмосфере}
}
@inproceedings{gordov__calculation_1938,
address = {Ленинград},
title = {Calculation of direct solar radiation on inclined surfaces differently oriented on the latitude 42{\degree} (in {R}ussian: Расчет прямой солнечной радиации на различно ориентированные наклонные поверхности для широты 42{\degree})},
booktitle = {Материалы по агроклиматическому районированию субтропиков СССР},
publisher = {Гидрометеорологическое изд-во},
author = {{Гордов А.Н.}},
year = {1938},
file = {ER16-04761.pdf:/Users/nkampy/Library/Application Support/Zotero/Profiles/f12p038d.default/zotero/storage/TUTQK3QF/ER16-04761.pdf:application/pdf}
}
并将其添加到 .tex 文件中:
%%%%%% Packages Added By Author %%%%%%
\usepackage[T1,T2A]{fontenc}% Russian language support
\usepackage[utf8]{inputenc}
%\DeclareUnicodeCharacter{2013}{\textendash}
%\DeclareUnicodeCharacter{00A0}{ }
%\DeclareUnicodeCharacter{00A0}{~}
\usepackage[russian,USenglish]{babel}
\usepackage{gensymb}% \degree command
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
并在正文中模板引用之后:
Test references: \cite{aizenshtata_features_1952, kondratyev_transfer_1950, gordov__calculation_1938}
您可以亲眼看到,问题在于 elsarticle 文章类如何处理名称中的西里尔字母转换为参考书目的首字母。您还可以看到,否则 unicode 字符会得到正确处理。
答案1
错误消息的形式表明您使用的是旧版本的 latex,较新的版本会给出数字。正如这里发布的,问号是 U+fffd(替换字符),但通常在文件中出现编码错误时会替换它(可能由本网站替换)。您可以使用
\DeclareUnicodeCharacter{FFFD}{????}
如果您的文件中是 U+FFFD,则会导致错误,而在输出中查找 ???? 将显示问题所在。
答案2
Misha 对这个问题的回答对我也很有用……我所要做的就是将 bibtex 编译命令从 bibtex 更改为 bibtexu。编译确实导致了一些错误,尽管它们对输出没有影响。