这是我的 MWE:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage[pdftex,colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue]{hyperref}
\begin{document}
\tableofcontents
\addcontentsline{toc}{section}{this produces warnings : é}
é % or \phantom{é} this 'loads' é ?
\addcontentsline{toc}{section}{this does not produce warnings : é}
\end{document}
我花了一段时间才找到为什么只有第一个\addcontentsline
收到警告,但看来我不能使用重音字符,只要我没有在其他地方使用它们......有没有办法解决这个问题?(除了我\phantom{é}
目前在文档开头所拥有的......)
使用 Miktex 2.9,我最近更新了我的所有软件包。
注意:如果我使用\'e
而不是é
,它会起作用,但由于各种原因,我需要实际的é
字符。
答案1
hyperref
需要为 unicode 字符做好准备,例如直接使用é
等。在文档中的某个地方输入é
将对所有后续出现的情况进行此操作,但不会为前一个出现的情况进行此操作。理想情况下,它应该出现在序言中,但这是不可能的,因为不能进行排版。
é
补救措施是在序言中“伪造”输出(以及可能的其他unicode字符)。
\PrerenderUnicode{é}
这可以通过序言来实现。
顺便说一句:如果\PrerenderUnicode
缺少书签,会有明确的警告,建议您\PrerenderUnicode
在序言中添加;-)
\documentclass[a4paper,11pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage[pdftex,colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue,unicode]{hyperref}
\PrerenderUnicode{é}
\begin{document}
\tableofcontents
\addcontentsline{toc}{section}{this produces warnings : é}
%é % or \phantom{é} this 'loads' é ?
\addcontentsline{toc}{section}{this does not produce warnings : é}
\end{document}
我省略了屏幕截图,因为不需要这样的屏幕截图。
\PreenderUnicode
澄清一下:如果在序言中没有应用,这里是在目录和书签中产生的警告。
答案2
最简单的解决方案是使用utf8
而不是utf8x
;过去有理由更喜欢后者(不是用法语写作时),但问题(希腊语)已经解决了。使用utf8x
and ucs
(这是隐含的),因为它比utf8
and 更复杂,基本上没有任何优势。
\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage[
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue,
]{hyperref}
\begin{document}
\tableofcontents
\addcontentsline{toc}{section}{no warning here : é}
é % or \phantom{é} this 'loads' é ?
\addcontentsline{toc}{section}{neither here : é}
\end{document}