激活带变音符号(重音符号)的字符

激活带变音符号(重音符号)的字符

我想创建一个环境,将所有转换á\=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;这主要取决于您要做什么。

在此处输入图片描述

相关内容