使用 \char 在 XeLaTeX 中编写 unicode 字符

使用 \char 在 XeLaTeX 中编写 unicode 字符

我想使用该\char命令打印一些字符。Unicode 是2b45。我已经尝试过代码\char"2b45,但它打印了一些非法字符和 b45。带括号的变体也不起作用。有人知道这个吗?我也尝试过其他变体,但它们也打印同样的东西。

答案1

正如 Joseph Wright 和其他人在评论中所说,您需要大写字母\char,所以\char"2B45

还有其他选项。LaTeX 命令\symbol{"2B45}本质上等同于\char,并且始终显示当前字体的 #x2B45 位置处的字符。转义序列^^^^2b45(通过采取小写字母)相当于输入 Unicode 字符 ⭅ (U+2B45)。如果该字符处于活动状态,此表单将触发其代码。

这是一个非常人为的例子,说明如何使用两者来定义一个符号,该符号在数学模式下生成具有正确运算符间距的数学符号,或者在文本模式下生成与当前文本格式匹配的符号。

请注意,第一个参数应该\newunicodechar是 Unicode 字符本身,并且它应该生成一个命令来选择正确的字体并从中显示符号。

\tracinglostchars=2 % Print a warning if a character is missing.
\documentclass{book}
\usepackage{newunicodechar}
\usepackage{unicode-math} % Or another package with \LLeftarrow, such as stix2
\usepackage[paperwidth=10cm]{geometry} % Solely to format a MWE on TeX.SX

\defaultfontfeatures{Scale=MatchLowercase}
\setmathfont{STIX Two Math}
\newfontfamily\symbolfamily{STIX Two Math}[
  BoldFont = *,
  BoldFeatures = {FakeBold = 1.05},
  SlantedFont = *,
  SlantedFeatures = {FakeSlant = 0.25},
  BoldSlantedFont = *,
  BoldSlantedFeatures = {FakeBold = 1.05, FakeSlant = 0.25}
]

\newunicodechar{^^^^2b45}% ⭅
{\ifmmode\LLeftarrow% In math-mode, use the math symbol
\else{\symbolfamily\symbol{"2B45}}% In text mode, change the font family
\fi}

\begin{document}
The ⭅ symbol can be used in math mode as \(a ⭅ b\).  If we had a full font family
containing this glyph, we could write it as \textbf{bold ⭅},
\textsl{slanted ⭅}, or {\bfseries\slshape both ⭅}.
\end{document}

字体示例

答案2

还有一些词来补充Davislor 的精彩回答

使用\char并不是解决这个问题的最佳方式,因为 TeX 会忽略后面的空格字符。另一方面,\symbol则不会。

尝试一下\char"2B45 is nice,你会发现没有空间。它会在那里

\symbol{"2B45} is nice

如果你希望始终输入十六进制代码而不关心大小写,你可以定义一个包装器:

\documentclass{article}
\usepackage{fontspec}

\setmainfont{EB Garamond}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\uni}{O{12}m}
 {
  \char_generate:nn { \int_from_hex:n { #2 } } { #1 }
 }

\ExplSyntaxOff

\begin{document}

The character \uni{2b45} is nice and so is \uni{2B46}.

\end{document}

可选参数(默认值为 12)可用于在需要时生成具有不同类别代码的字符。

相关内容