在 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