ASCII 文件中的 LuaTeX unicode 转义序列(用于优雅降级)

ASCII 文件中的 LuaTeX unicode 转义序列(用于优雅降级)

我有一个可重复使用的组件,我想在其中包含一些 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}

在此处输入图片描述

相关内容