使用反斜杠和其后的非 ASCII 字符

使用反斜杠和其后的非 ASCII 字符

我正在编写一个带有反斜杠()特殊字符的文本\,该文本需要包含该字符和以下非 ASCII 符号(西里尔字母),因此例如我输入:

text \ц other text

我必须进行编译:

text <special char> other text

如您所见,该序列应转换为<special char>。我该如何实现这一点?

我尝试定义该特殊字符如下:

\newcommand{\ц}{\char`\\\char"1089}

但是编译器抛出了错误。难道我不能退出 while 块以便按\原样处理 char 吗?例如:

\escapetext{text \ц other text}

它将接受括号内的文本作为纯文本? 看来我不能用\verb这个:

\verb$\ц$

因为它正在将字体更改为所需的字体。

附加信息:

我的文本包含许多等序列,将它们替换为\spc{ц}、 等特定序列在我看来是不合适的,因为这会使文本源的编写和阅读变得更加复杂。有些时候我会将问题缩小到这个。我可以使用重新定义吗:

 \newcommand{\ц}{\char`\\\char"1089}

luatexxelatex

答案1

您不能在中定义该类型的命令pdflatex,但可以使用不同的方法。

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\newcommand\spc[1]{%
  \symbol{`\\}% the backslash
  #1% the letter
}

\begin{document}

text \spc{ц} other text

\end{document}

在此处输入图片描述

可能也做

\def\ц{\spc{ц}}

进而

text \ц other text

可以,但这是一种 hack,只有一个可以定义这种命令。

对于“转义”任意西里尔字符,你可以这样做

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\newcommand\spc[1]{%
  \symbol{`\\}% the backslash
  #1% the letter
}

\def\^^d0#1{\spc{^^d0#1}}
\def\^^d1#1{\spc{^^d1#1}}


\begin{document}

text \ц other text

text \э other text

\end{document}

在此处输入图片描述

它是如何工作的?

所提议的宏利用了 UTF-8 文件是如何由 读取的pdftex,我记得,这是一个 8 位引擎。Unicode 中的基本西里尔字符位于 U+0400 到 U+047F 的位置,它们由 UTF-8 表示为以<D0>和 为前缀的对<D1>。例如,ц 由两个字节 表示<D1><86>

在 TeX 中,可以用符号 来表示一个字节^^xy,其中xy是一对(小写)十六进制数字(0123456789abcdef)。

因此我定义控制符号\^^d0\^^d1检索后续字节,打印反斜杠,然后放回第一个和第二个字节,以便通过inputenc使用选项以通常的方式进行解释utf8

相关内容