我正在使用LuaLaTeX
。我收到的一些源文件包含不受普遍支持的 Unicode 字符。到目前为止,常见的有:
\documentclass{article}
\usepackage{newunicodechar}
\newunicodechar{^^^^2e3a}{—\,—} % hair spaces for testing only
\newunicodechar{^^^^2e3b}{—\,—\,—}
\begin{document}
This is a TWO-EM DASH (U+2E3A): ⸺
This is a THREE-EM DASH (U+2E3B): ⸻
\end{document}
请注意,在上面的例子中,我不得不“伪造”(重新定义)两个字符,因为拉丁现代统一码缺少所需的字形。但许多其他字体都有这些字形:有没有办法让我\newunicodechar
有条件地只对需要它的字体使用(或其他方法)?我讨厌使用一些代用品如果字形确实存在于所选字体中,则为字符或方法。
编辑:按照David的建议,我取得了一些进展:
\documentclass{article}
\usepackage{newunicodechar}
\iffontchar\font "2e3a \else {%
\newunicodechar{^^^^2e3a}{—\,—}%
} \fi
\begin{document}
This font has \iffontchar\font "2014 \else {\textbf{no}} \fi support for EM DASH (U+2014): —
This font has \iffontchar\font "2e3a \else {\textbf{no}} \fi support for TWO-EM DASH (U+2E3A): ⸺
\end{document}
但它在序言中不起作用。(而\newunicodechar
在序言之外则不起作用。)我做错了什么?没有错误,只是没有达到预期的结果。
编辑2:我明白了。请参阅下面的完整答案。
答案1
对于 luatex(或 xetex 也一样),您使用的不是 CM 字体,而是拉丁现代 Unicode。对于 Unicode TeX,您可以询问当前字体是否具有带有
\iffontchar \font "2E3A
答案2
您想在使用时测试其存在性。我离开了\,
,而不是可能\!
只是想看看有什么不同。
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\newunicodechar{⸺}{\iffontchar\font`⸺\relax ⸺\else---\,---\fi}
\newfontface{\test}{Source Sans Pro}
\begin{document}
⸺
\test⸺
\end{document}
该字形在 Latin Modern 中不存在,但在 Source Sans Pro 中存在。
答案3
明白了。毕竟是语法错误。我发布了我的解决方案:
\documentclass{article}
\usepackage{newunicodechar}
\iffontchar\font "2e3a%
\relax\else\newunicodechar{^^^^2e3a}{—\,—}%
\fi
\begin{document}
This font has \iffontchar\font "2014
\else {\textbf{no}} \fi support for EM DASH (U+2014): —
This font has \iffontchar\font "2e3a
\else {\textbf{no}} \fi support for TWO-EM DASH (U+2E3A): ⸺
\end{document}