![失去了我的表情:让 Unicode 工作值得付出努力吗?](https://linux22.com/image/383239/%E5%A4%B1%E5%8E%BB%E4%BA%86%E6%88%91%E7%9A%84%E8%A1%A8%E6%83%85%EF%BC%9A%E8%AE%A9%20Unicode%20%E5%B7%A5%E4%BD%9C%E5%80%BC%E5%BE%97%E4%BB%98%E5%87%BA%E5%8A%AA%E5%8A%9B%E5%90%97%EF%BC%9F.png)
我制作了一些带有笑脸的 LyX Beamer 幻灯片,但我发现它们无法在转换到 utf-8 后存活下来。
我对此进行了大量的修改。目前看来,至少对于表情符号和皱眉等杂项符号,我根本不需要 Unicode 条目。以 Unicode 形式输入它们是一种令人沮丧、困惑的体验。
我错了吗?
以下是我的简单用例。唯一的内容是 4 个符号,没有 Unicode
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{wasysym}
\usepackage{babel}
\begin{document}
\frownie \smiley \blacksmiley \sun{}
\end{document}
编译通过,看起来不错。我输入“\smiley”,该符号来自 wasysm。
然后我将语言编码改为 utf8 并插入 Unicode 符号
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{wasysym}
\usepackage{babel}
\begin{document}
☹☺☻☼
\end{document}
该文档无法编译,错误消息如下
Package inputenc Error: Unicode char ☹ (U+2639)
Package inputenc Error: Unicode char ☺ (U+263A)
Package inputenc Error: Unicode char ☻ (U+263B)
Package inputenc Error: Unicode char ☼ (U+263C)
一个快速修复似乎是忽略 Unicode 输入,返回\smiley
。这确实可以编译:
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{wasysym}
\usepackage{babel}
\begin{document}
\frownie \smiley \blacksmiley \sun{}
\end{document}
这不是一个有前瞻性的 Unicode 解决方案。
然而,所有 Unicode 解决方案似乎都是完成相同工作的复杂方法。它们 ☺
在 wasysym 包中创建从输入符号到 \smiley 的映射。以下是示例。
- DeclareUnicodeCharacter。如果我在文档中输入一个 Unicode 字符,比如说
☺
,我可以使用 Emacs 找出该 Unicode 字符的编号 (C-u
C-x
=
),它会显示笑脸是 263A。
该文件编译:
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{wasysym}
\usepackage{babel}
\DeclareUnicodeCharacter{263A}{\smiley}
\begin{document}
☺
\end{document}
因此,作为能够在 LaTeX 中输入的“好处”的回报,我还需要做额外的工作,即告诉 LaTeX 在哪里找到该符号。直接输入文本☺
不是更简单吗?\smiley
- 使用 newunicodechar 包。
这更容易,因为它无需指定 Unicode 字符编号即可工作。newunicodechar 将符号作为第一个参数,将 waysym LaTeX 标记作为第二个参数。
这是一个工作示例
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{wasysym}
\usepackage{babel}
\usepackage{newunicodechar}
\newunicodechar{☺}{\smiley}
\begin{document}
☺
\end{document}
再次,Unicode 的“胜利”在于我可以输入“☺”而不是“\smiley”,但据我所知,这是唯一的好处。
- 更换编译器为xelatex,修改文档字体设置。
我做了一些测试,它确实有效。但是,我担心其他功能可能无法正常工作。(记得当我从 latex 更改为 pdflatex 时,pstricks 停止工作了。)
答案1
您发布的第一个文档的第一个错误消息是,正如您所显示的,
! Package inputenc Error: Unicode character ☹ (U+2639)
(inputenc) not set up for use with LaTeX.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.7 ☹
☺☻☼
?
如果你h
按照提示输入,你会得到进一步的提示:
h
You may provide a definition with
\DeclareUnicodeCharacter
因此 Unicode 编号就在错误消息中,你不需要单独查找它,
\DeclareUnicodeCharacter {2639}{\frownie}
做你想做的事。
对于诸如此类的符号☹
,正如您所说,对于大多数人来说,输入基于 ASCII 的 TeX 名称更容易\frownie
,但同样的机制也允许您输入χαμόγελο
或スマイル
或任何内容(谷歌翻译应归咎于翻译中的任何错误:-)并且如果您使用这种语言书写,通过基于其英文名称的命令输入每个字母会有些累人。
但通过设计所有inputenc
这些字符在进一步处理到排版输出之前,总是通过基于 ASCII 的内部形式,因此这完全是一个输入形式的选择。是否值得付出努力取决于你的情况,以及是否更容易输入☹
或\frownie
或χαμόγελο
类似的东西\textchi\textalpha\textmu\'\textomicron\textgamma\textepsilon\textlambda\textomicron