Luatex(或 latex)能否检测字符串中非 latin1 字符的存在?

Luatex(或 latex)能否检测字符串中非 latin1 字符的存在?

使用 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 以上的字符。

相关内容