将整数转换为其 ASCII 字符

将整数转换为其 ASCII 字符

在 ASCII 表中,…

  • !(感叹号)也是可打印字符,其十进制表示为33
  • a(拉丁小写字母 a)是可打印字符,其十进制表示形式为97
  • }(右花括号)也是一个可打印字符,其十进制表示为125

我想知道 LaTeX 中是否有一个宏可以将十进制表示形式转换为其 ASCII 字符。

\symbol{...}返回a和。我以为这完成了我所寻找的,但它返回97(双重尖音符) 。!33\symbol{...}˝125

\documentclass{article}

\begin{document}
\symbol{33} % exclamation mark
\symbol{97} % latin small letter a
\symbol{125} % it should return "right curly bracket", but it returns ˝ (double acute accent)
\end{document}

在此处输入图片描述

我的问题是:在 LaTeX 环境中,是否有内置宏可以将整数(即十进制表示)转换为其 ASCII 字符?该宏应该适用于 ASCII 中的任何可打印字符(即 32 到 126 之间的范围)。

我发现这个问题这与我的问题类似,但它与“扩展 ascii 表”的定义混淆了。

答案1

TeXbook 说

要访问任何字符,您可以输入

\char⟨数字⟩

其中 ⟨number⟩ 是 0 到 255 之间的任意数字(后面可以跟一个空格);你将从当前字体

默认字体是cmr10,其中位置 125(八进制表示为 '175)的字体字符是 ̋ 。这就是为什么\char125\symbol{125}返回 ̋ 而不是右花括号。

但是,该cmtt10字体与 ASCII 表一致(要确认这一点,请查看 TeXbook 的第 429 页)。因此,为了产生\char125正确的花括号,您可以选择使用 cmtt10 字体:

\documentclass{article}
\begin{document}

\texttt{\char33\char37\char97\char125\symbol{125}}

\end{document}

在此处输入图片描述

另一种方法是使用T1字体编码,即添加

\usepackage[T1]{fontenc}

在序言中。

\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}

\char33\char37\char97\char125\symbol{125}

\end{document}

在此处输入图片描述

答案2

TeX 基元\char number用给定的代码号创建一个字符。TeX 基元用\Uchar number给定的代码号创建一个标记。第二个基元仅在 XeTeX 和 LuaTeX 中实现。区别在于:\char number在标记化后起作用(在 XeTeX 或 LuaTeX 中,Unicode 是可接受的)并且不可扩展,\Uchar number返回 Unicode 字符:类别 12 的标记并且可扩展。

答案3

作为wipet 说,在原始级别,经典引擎不提供通过扩展生成字符的方法。但是,可以使用宏来完成此操作: 中expl3有用\char_generate:nn于此目的的宏,或者用于更通用的代码点(完整的 Unicode 覆盖),\codepoint_generate:nn。因此,我们可能会这样做

\ExplSyntaxOn
\cs_new:Npn \mysymbol #1 { \codepoint_generate:nn {#1} { 12 } }
\ExplSyntaxOff

创建一个命令\mysymbol,通过扩展来生成跨 Unicode 范围的“其他”字符。

请注意斯蒂芬说,这并不意味着符号可以直接打印。

相关内容