如何检测 Unicode 字符是否已定义?

如何检测 Unicode 字符是否已定义?

在 pdfLaTeX 中使用inputenc,可以为 Unicode 字符定义宏,如下所示:

\DeclareUnicodeCharacter{03BC}{\textmu}

有没有办法检测 μ 是否已定义?(如果已定义,则定义为何)?

我尝试过的事情

\token_if_macro:NTF { μ } {
    \iow_term:n {yes}
} {
    \iow_term:n {no}
}

然而,这总是返回“是”,因为似乎未定义的 Unicode 字符实际上被定义为宏以给出Unicode char ⟨charcode⟩ not set up for use with LaTeX错误消息。

(是的,我了解 XeTeX 和 LuaTeX。)

答案1

您想查看\u8:μ当 UTF8 中形成的字节μ转换为“其他”字符时控制序列是否存在,该序列是通过使用\detokenize或 获得的,expl3形式为\tl_to_str:n

\documentclass{article}

\ExplSyntaxOn

\cs_if_exist:cTF { u8:\tl_to_str:n { μ } }
 { \iow_term:n {yes} }
 { \iow_term:n {no} }

\DeclareUnicodeCharacter{03BC}{\textmu}

\cs_if_exist:cTF { u8:\tl_to_str:n { μ } }
 { \iow_term:n {yes} }
 { \iow_term:n {no} }

控制台将显示

no
yes

具有用户界面:

\documentclass{article}
\usepackage{newunicodechar}

\ExplSyntaxOn

\NewDocumentCommand{\checkunicodeTF}{mmm}
 {
  \wbob_checkunicode:nnn { #1 } { #2 } { #3 }
 }
\NewDocumentCommand{\checkunicodeT}{mm}
 {
  \wbob_checkunicode:nnn { #1 } { #2 } { }
 }
\NewDocumentCommand{\checkunicodeF}{mm}
 {
  \wbob_checkunicode:nnn { #1 } { } { #2 }
 }

\cs_new_protected:Nn \wbob_checkunicode:nnn
 {
  \cs_if_exist:cTF { u8:\tl_to_str:n { #1 } } { #2 } { #3 }
 }

\ExplSyntaxOff

\checkunicodeTF{à}{\typeout{à is defined}}{\typeout{à is undefined}}
\checkunicodeTF{μ}{\typeout{μ is defined}}{\typeout{μ is undefined}}
\checkunicodeF{μ}{\newunicodechar{μ}{\textmu}}

\begin{document}

μ

\end{document}

这将\textmu在控制台上打印并显示,

à is defined
μ is undefined

相关内容