在 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 范围的“其他”字符。
请注意斯蒂芬说,这并不意味着符号可以直接打印。