失去了我的表情:让 Unicode 工作值得付出努力吗?

失去了我的表情:让 Unicode 工作值得付出努力吗?

我制作了一些带有笑脸的 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 的映射。以下是示例。

  1. 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

  1. 使用 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”,但据我所知,这是唯一的好处。

  1. 更换编译器为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

相关内容