我想创建一个环境,将所有转换á
为\=a
,所有é
转换为\=e
等等......(长音符的简写)本来应该是一个五分钟即可轻松编写的工具,却变成了一场真正的噩梦,主要是因为我无法激活角色á. TeX 认为它实际上是二字符,导致 \catcode 出现错误。
下面的方法也不起作用:
\defá{\=a}
\defé{\=e}
...
因为“重音字符”来自前“字母字符”。这样,只有 ú 有效,其余的都会产生错误。
此外,尝试在控制序列中隔离“重音字符”会产生 inpuntec 错误(不包括 inputenc 会产生另一个错误)。但由于 inputenc 本身可以很好地完成类似的技巧,我想知道:有什么好的方法可以做到这一点?而且,哪个更好:TeX 解决方案还是 inputenc 装置?
编辑:这个想法需要能够在身体的 LaTeX。全局更改会弄乱我的正常文本,该文本使用了很多变音符号(但没有长音符号)。
答案1
在 UTF-8 编码中,ā
是一个双字节字符;它是U+0101
,其 UTF-8 表示形式是0xC481
,这意味着该文件具有二字节来表示字符。请记住,计算机上的文件只是字节序列,软件可能会以不同的方式解释它们。
TeX(其原始形式,由 pdfTeX 共享)是八位软件,它实际上并不理解 UTF-8,因为它一次只能读取一个字节。因此,如果您的文件保存为 UTF-8,则编辑器上的输入将显示为
\catcode`ā=\active
是真的
\catcode`<C4><81>=\active
这是语法错误。我用<xy>
它来表示非 ASCII 字符。
我不明白你为什么要改成á
,\=a
但这是你的文档,不是我的。你必须去学习底层编程。以下是一个例子:
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
This is an acute a: á
Now for something completely different:
\begingroup
\expandafter\def\csname u8:\detokenize{á}\endcsname{\=a}%
á
\endgroup
\end{document}
这将打印
所以你看,你想要的是可以实现的。现在,让我们为此构建一个界面。
\documentclass{article}
\usepackage[utf8]{inputenc}
\makeatletter
\newcommand{\convertaccents}[1]{%
\@for\next:=#1\do{\expandafter\convert@accents\next}%
}
\newcommand\convert@accents[2]{%
\expandafter\def\csname u8:\detokenize{#1}\endcsname{#2}%
}
\makeatother
\newenvironment{convertedtext}[1]
{%
\convertaccents{#1}
\begin{quote}% or whatever
}
{%
\end{quote}
}
\begin{document}
This is an acute a: á
Now for something completely different:
\begin{convertedtext}{{á}{\=a},{é}{\=e}}
áé
\end{convertedtext}
\end{document}
这里我将要更改的字符列表作为环境的参数给出。这不是强制性的,您可以将列表作为 的一部分给出\newenvironment
;这主要取决于您要做什么。