Latex 宏中的 Unicode 字符匹配

Latex 宏中的 Unicode 字符匹配

我在获取支持 UTF-8 字符的宏时遇到了问题。我能够将问题归结为以下不起作用的最小示例:

\documentclass{beamer}
\def\ta#1#2{BA}
\begin{document}
\begin{frame}

\ta1 ä
\end{frame}
\end{document}

这会产生无效的 UTF-8 字节“A4 错误。我的文件采用 UTF-8 编码。

查看 UTF-8 表,很明显 A4 来自哪里,它是变音符号的第二个字节。

但是,我不知道如何解决这个问题。

我该如何正确设计一个宏来挑选单个字母,而无需将 UTF 字符分成几个字节?

更新:在这里学到了很多东西,但仍然坚持最终的用例,我将在一个示例中复制它:

\documentclass{article}
\usepackage{tabto}

\makeatletter
\def\tb#1#2{\def\ca{#1}\expandafter\tba#2}

\def\tba#1{%
\ifx#1+\tabto{\dimexpr\ca cm + 0.5cm}%
\else\ifx#1-\tabto{\dimexpr\ca cm - 0.5cm}%
\else\tabto{\dimexpr\ca cm}%
\ifx\UTFviii@two@octets#1\expandafter\tbaa\fi%
\ifx\UTFviii@three@octets#1\expandafter\tbab\fi%
\ifx\UTFviii@four@octets#1\expandafter\tbac\fi%
\fi\fi%
\relax#1%
}

\def\tbaa#1#2{#1#2}
\def\tbab#1#2#3{#1#2#3}
\def\tbac#1#2#3#4{#1#2#3#4}

\begin{document}

VOR\tb3- Ü

VOR \tb3 Ü

VOR \tb3+ Ü
\end{document}

我无法摆脱 + 和 - 情况下的 + 和 - 的打印输出。无论我尝试什么,总是会产生另一个 UTF-8 编码错误。

答案1

您需要将参数括起来以使所有内容保持在一起(您的\ta宏在使用括起来的参数时不会发生变化,尽管我\typeout在这里添加了一个用于调试。或者您需要检查第一个字节,然后收集该字符的 UTF-8 编码中尽可能多的字节(\tb此处)

这将产生一个日志

1,ä
macro:->1,macro:->\UTFviii@two@octets ä
2,

相关内容