我的 .tex 和 .sty 文件采用 latin-1 编码。我已 [使用 Emacs] 将它们转换为 utf-8。
在我的 sty 文件中,我替换了
\usepackage[latin1]{inputenc}
和
\usepackage[utf8]{inputenc}
::问题:我的样式文件有命令
\newcommand{°}{\ensuremath{^\circ}}
\newcommand{½}{\ensuremath{\frac{1}{2}}}
等等。
当我从命令行运行命令“pdflatex”时,收到此错误消息:
! Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `utf8'.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.86 \newcommand{°}{\ensuremath{^\circ}}
显示角色为
°
有没有办法用 utf-8 处理这些字符,还是我应该切换回 latin-1?
============= [我不确定 stackexchange 方法对 Ulrike Fischer 的建议有何影响,所以我正在编辑我最初的问题。
唉,这两种解决方案都无法在我的系统 [即“这是 pdfTeX,版本 3.1415926-1.40.11(TeX Live 2010)”] 上运行,或者我可能误用了您的建议。
运行 pdfTeX
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\DeclareUnicodeCharacter{00B0}{\ensuremath{^\circ}}
\begin{document}
Test: $ ½ $
\end{document}
生产
This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)
restricted \write18 enabled.
entering extended mode
(./de.testing.latex
LaTeX2e <2009/09/24>
Babel <v3.8l> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2009-06-19, ngerman-x-2009-06-19, ancientgreek, ibycus, arabic, armenian
, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danish, dutch, u
kenglish, usenglishmax, esperanto, estonian, farsi, finnish, french, galician,
german, ngerman, swissgerman, monogreek, greek, hungarian, icelandic, assamese,
bengali, gujarati, hindi, kannada, malayalam, marathi, oriya, panjabi, tamil,
telugu, indonesian, interlingua, irish, italian, kurmanji, lao, latin, latvian,
lithuanian, mongolian, mongolianlmc, bokmal, nynorsk, polish, portuguese, roma
nian, russian, sanskrit, serbian, slovak, slovenian, spanish, swedish, turkish,
turkmen, ukrainian, uppersorbian, welsh, loaded.
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/t1enc.def))
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/inputenc.sty
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/utf8.def
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/t1enc.dfu)
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/ot1enc.dfu)
(/usr/local/texlive/2010/texmf-dist/tex/latex/base/omsenc.dfu)))
(/Users/squash/Texdir/Pkgs/newunicodechar.sty) (./de.testing.aux)
! 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.
...
l.11 $½
$
?
无论是否存在“\usepackage[T1]{fontenc}”,也无论是否存在“\usepackage{newunicodechar}”,都会发生这种情况。
答案1
Ulrike 的评论效果很好,例如包newunicodechar
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\newunicodechar{½}{\ensuremath{\frac{1}{2}}}
\begin{document}
Test: $ ½ $
\end{document}
无需包即可知道十六进制 Unicode 号码newunicodechar
:
\DeclareUnicodeCharacter{00BD}{\ensuremath{\frac{1}{2}}
TS1
包加载的字体编码textcomp
包含此符号的插槽并使用文本模式字符\textonehalf
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\begin{document}
Test: ½
\end{document}
答案2
谢谢 Heiko 和 Ulrike。我确实已经尝试过了
\usepackage{newunicodechar}
不使用 \DeclareUnicodeCharacter,但我保留了原来的命令,例如
\newcommand{·}{\cdot}
这导致了一个我不太理解的错误。将后者替换为
\newunicodechar{·}{\cdot}
使我的样式文件加载更多。
事实证明,虽然我之前的 latin-1 设置接受了如下表达式
$ \boldsymbol· $
它们现在会导致错误。我当前的 UTF8 设置只有在我输入括号时才有效,
$ \boldsymbol{·} $
也就是说,当角色
¼ ± ·
等作为参数传递给宏,它们必须放在括号中。或者我可能设置错了。
无论如何,经过一系列全局搜索替换后,我的文件现在正在编译。再次感谢。