使用 Luatex Unicode,我想检测字符串是否包含 Latin-1 集之外的任何字符。如果包含,那么我想分叉。类似这样的事情:
\def\myTestString{foo\textemdash bar}%
\ifIsOnlyLatinOne{\myTestString}{\doThis}{\doThat}%
理想情况下,如果 \myTestString 包含任何 TeX 字符代码(没有大宏),它将被扩展。我还希望它检查粘贴的 Unicode 字符。在上述情况下,由于 \textemdash 不在 Latin-1 中,因此结果将是 \doThat。如果我从字符映射中粘贴 emdash,而不是编写 TeX 代码,结果应该相同。
我不是指编码。一切都是UTF8。我只是指字符的选择。
理由:无论 Luatex 能否处理 Unicode,我的文档的一部分都必须限制为 Latin-1 字符。我想通过发送消息来提醒自己(我知道如何做那部分)。
答案1
您可以遍历所有字符节点并检查非 ASCII 字符
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\def\myTestString{fo―o\textemdash bar}%
\setbox0\hbox{\myTestString}
\if\directlua{%
res="TF"
local h=tex.getbox(0).head
for n in node.traverse(h) do
if (n.id==37) then
print("\string\n==" .. n.char)
if (n.char > 255) then
res="TT"
end
end
end
tex.print(res)
}%
non latin-1
\else
all latin-1
\fi
\end{document}
请注意,如果您不在fontspec
此处加载,您将默认进行OT1
编码并且\textemdash
不会扩展到 255 以上的字符。