我在获取支持 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,