将 LaTeX 文件从 latin-1 切换到 utf-8:“使用的键盘字符未定义”

将 LaTeX 文件从 latin-1 切换到 utf-8:“使用的键盘字符未定义”

我的 .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{·} $

也就是说,当角色

¼  ±  ·

等作为参数传递给宏,它们必须放在括号中。或者我可能设置错了。

无论如何,经过一系列全局搜索替换后,我的文件现在正在编译。再次感谢。

相关内容