我曾经inputenc
能够在源代码中写入 unicode 并将其转换为 LaTeX 命令。例如
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{221A}{\sqrt}
\DeclareUnicodeCharacter{03C0}{\pi}
\DeclareUnicodeCharacter{00B2}{^2}
然后$√{π²}$
变成$\sqrt{\pi^2}$
。这非常方便,我使用的键盘布局可以轻松访问 α、β、→、⇔、∀、⊂、∨、∩、√、∞、∑ 等字符。
但当我写的时候,例如,
$$\frac a b$$
$$\frac a σ$$
$$\frac σ b$$
第一行按预期输出“a/b”,但第二行出现错误Argument of \UTFviii@two@octets@combine has an extra }. $$\frac a �
。第三行也出现错误,如果希腊字母进入第一个参数:Package inputenc Error: Invalid UTF-8 byte sequence. $$\frac σ
。有趣的是,如果命令只有一个参数,例如,它可以正常工作$\sqrt σ$
。
这是什么原因造成的?可以解决吗?
梅威瑟:
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{03C3}{\sigma}
\begin{document}
$$a$$
$$σ$$
$$\frac a b$$
$$\frac a σ$$
$$\frac σ b$$
\end{document}
答案1
所有带参数的命令都支持 LaTeX 语法,即使用括号
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{03C3}{\sigma}
\begin{document}
\[a\]
\[σ\]
\[\frac{a}{b}\]
\[\frac{a}{σ}\]
\[\frac{σ}{b}\]
\end{document}
工作正常,没有错误。
如果参数是单个标记,则有时可以删除括号,但此处的希腊语不是单个标记。
这仅适用于经典的 8 位 TeX,其中 UTF-8 编码的每个字节都是一个单独的标记。
如果您使用 Unicode TeX(例如 lualatex 或 xelatex),则希腊字母的工作方式与拉丁字母相同:
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\[a\]
\[σ\]
\[\frac a b\]
\[\frac a σ\]
\[\frac σ b\]
\end{document}