我有一个可重复使用的组件,我想在其中包含一些 Unicode 符号。我使用 LuaLaTeX。但是,我希望文件能够正常失败(它应该检测在其他程序下运行并替换符号)。但是,为此,文件需要可被 ASCII 工具读取,这样我就无法直接输入 Unicode 符号。LuaTeX 中是否有任何机制/宏可以转义 Unicode 字符?
答案1
也许这就是您所寻找的。
\documentclass{article}
\usepackage{ifluatex}
\ifluatex
\usepackage{fontspec}
\else
\catcode`\^^^=\active
\begingroup\lccode`~=`\^^^\lowercase{\endgroup
\def~^}#1#2#3#4{$\langle$U+\uppercase{#1#2#3#4}$\rangle$}
\fi
\begin{document}
^^^^1e0f
\end{document}
LuaTeX 中的表示法^^^^
规定了以下四个十六进制数字(为小写)对应的 Unicode 字符abcdef
。
如果pdflatex
使用标准,则该序列^^^
将被解释为一个"1E
活跃的字符(带有代码),因此它会吞噬第四个字符^
并吸收四位数字。
如果必须使用高于 的 Unicode 点U+FFFF
,则最好使用六位^
和六位数字(始终允许用零填充)。以下是修改:
\documentclass{article}
\usepackage{ifluatex}
\ifluatex
\usepackage{fontspec}
\else
\catcode`\^^^=\active
\begingroup\lccode`~=`\^^^\lowercase{\endgroup
\def~~}#1#2#3#4#5#6{$\langle$U+\uppercase{#1#2#3#4#5#6}$\rangle$}
\fi
\begin{document}
^^^^^^001e0f
\end{document}
使用 LuaLaTeX 输出(两种代码)
输出带有pdflatex
(四个 ^)
输出带有pdflatex
(六个 ^)
替换字符的技巧(如果某个文件中有定义.dfu
)
\documentclass{article}
\usepackage{ifluatex}
\ifluatex
\usepackage{fontspec}
\else
\catcode`\^^^=\active
\begingroup\lccode`~=`\^^^\lowercase{\endgroup
\def~^}#1#2#3#4{\uppercase{\csname GRACEFUL@#1#2#3#4\endcsname}}
\begingroup
\makeatletter
\def\DeclareUnicodeCharacter#1#2{%
\global\@namedef{GRACEFUL@#1}{#2}%
}
\input{t1enc.dfu}% and the other .dfu files you need
\input{ix-utf8enc.dfu}% and the other .dfu files you need
\endgroup
\fi
\begin{document}
^^^^017e
\end{document}