以下定义命令\cmark
和\xmark
分别生成代码为 U+2718 和 U+2714 的 Unicode 字符。
问题:
当仅使用该字体中的一个或两个字符时,是否存在以下更简单或替代的方法来指定与主要使用字体不同的单个字符?
% !TeX program =xelatexmk
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Termes}
\setmathfont{TeX Gyre Termes Math}
% How create command for character that has Unicode U+2718?
\newfontfamily{\xmarkfont}{LibertinusMath-Regular.otf}
\newcommand{\xmark}{\xmarkfont\char"2718}
\newfontfamily{\cmarkfont}{TeX Gyre Pagella Math}
\newcommand{\cmark}{\xmarkfont\char"2714}
\begin{document}
\begin{tabular}{lc}
Wrong & \xmark\\
Right & \cmark
\end{tabular}
\end{document}
答案1
您确实希望更改组内的字体,以便字体更改不会影响其后的文本。因此,
\newcommand{\xmark}{{\xmarkfont\char"2718}}
您可以\xmarkfont
像在 MWE 中那样定义具有该字体的字体,可能使用 进行缩放Scale=MatchUppercase
。
在数学模式下,您可以使用选项unicode-math
设置特定数学字符的字体。range=
\setmathfont
您可以使用newunicodechar
将角色设置为活动状态,这样您就可以将其粘贴到源中,例如
\usepackage{newunicodechar}
\newunicodechar{^^^^2718}{\xmark}
这样您就可以键入\xmark
、ઞ 或^^^^2718
并使其正常工作。
在 XeLaTeX 中,理论上您可以使用它ucharclasses
来设置所有 dingbat 或任何其他 Unicode 块的字体。然而,截至 2020 年 7 月,此包已损坏且似乎无人维护。
如果您希望当且仅当字体具有该字符时才使用该字符,而当且仅当字体没有该字符时才回退,则可以将命令定义\xmark
为条件命令\iffontchar
。
在 XeTEX 中,可以插入命令(例如\begingroup\symbolfont
和\endgroup
)在特定字符组周围,但很复杂,方法是\XeTeXinterchartoks
。这样您就可以输入它们并正确选择字体,而无需明确的标记,这就是ucharclasses
应该做的。