![获取与 \chardef 控制序列关联的数字](https://linux22.com/image/241999/%E8%8E%B7%E5%8F%96%E4%B8%8E%20%5Cchardef%20%E6%8E%A7%E5%88%B6%E5%BA%8F%E5%88%97%E5%85%B3%E8%81%94%E7%9A%84%E6%95%B0%E5%AD%97.png)
我希望通过提供控制序列来访问与框关联的数字。此控制序列通过\newbox
使用来定义\chardef
,因此“控制序列框”扩展为类似\char"1A
。我想获取该十六进制1A
。以下是我到目前为止所做的。
\documentclass{article}
\begin{document}
\newbox\mybox
\edef\temp{%
\def\noexpand\stripchar\detokenize{\char"}##1\noexpand\endstripchar{##1}}
\temp
\def\printboxnumber#1{%
\expandafter\stripchar\meaning#1\endstripchar}
\printboxnumber\mybox
\end{document}
是\detokenize
为了处理\catcode
由于使用 而导致的变化\meaning
。\printboxnumber
不幸的是,我得到了
! Use of \stripchar doesn't match its definition.
<inserted text> \char"
1A
l.13 \printboxnumber\mybox
怎么了?
答案1
\detokenize{\char"}
结果是\char "
(控制序列名称后有一个空格);你需要\string
:
\begingroup\edef\temp{\endgroup
\def\noexpand\stripchar\string\char\string"##1\noexpand\endstripchar{##1}}
\temp
第二个\string
是巴别塔被使用。-\begingroup
是\endgroup
为了避免遗漏\temp
已定义。
只需通过 即可获得十进制表示形式\number\mybox
。