如何将用户提供的十六进制字符串(例如14b
或 )转换14B
为 (La)TeX 可以识别为数字的内容?我猜想像 xcolor 这样的包可以做到这一点,但我无法找到如何做到这一点(谷歌在这里没有帮助)。我知道"XX
但它最多只能达到 FF,或者 XeTeX 中的 FFFF,这对我来说在所有情况下都不够。在输入过程中转换为十进制并不是一个真正的选择。请注意,这不是关于以不同形式排版数字,而是关于将表示十六进制数字的字符串参数转换为可用于计算的内容。
答案1
函数\int_from_hex:n
接受从到 的expl3
数字的大写和小写字母。因此,您可以执行A
F
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \intfromhex \int_from_hex:n
\ExplSyntaxOff
and\Uchar\intfromhex{14b}
或\Uchar\intfromhex{14B}
将产生相同的结果。
实际上expl3
有自己的版本\Uchar
,但这是另一个话题。
如果你需要做算术,还可以添加
\cs_set_eq:NN \inteval \int_eval:n
之前\ExplSyntaxOff
和类似
\Uchar\inteval{36+\intfromhex{14b}}
可以工作(这里 36 是十进制)。
请注意,这36+"14b
不起作用,因为"
符号中只允许大写字母。使用\intfromhex
转换为十进制。
答案2
\usepackage{xintbinhex}
,然后\xintDecToHex{\the\numexpr "ABCDE + "EBCDA\relax}
以十六进制表示法扩展结果,但不带前导"
。但在 TeX 需要数字的任何情况下,您都可以使用
"\xintDecToHex{\the\numexpr "ABCDE + "EBCDA\relax}
语法,并 "
预先手动添加。
如果结果\numexpr
超出 TeX 界限(十六进制为"7FFFFFFF
),您可以加载包xintexpr。 然后
\xintDecToHex{\thexintiiexpr "7FFFFFFF + "1\relax}
将按预期工作并产生结果80000000
。同样没有前导"
。
\documentclass{scrartcl}
\usepackage{xintbinhex}
\usepackage{xintexpr}
\begin{document}
\xintDecToHex{\the\numexpr "ABCDE + "EBCDA\relax}
\xintDecToHex{\the\numexpr "111111 + "ABCDEF\relax}
\count255 = "\xintDecToHex{\the\numexpr "ABCDE + "EBCDA\relax}
\the\count255
\xintDecToHex{\thexintiiexpr "7FFFFFFF + "1\relax}
\end{document}
如果您的查询是将十六进制转换为十进制,那么还有\xintHexToDec
(还有什么?)
\xintHexToDec{AAAAABBBBBCCCCCDDDDDEEEEEFFFFF99999}
请注意,在此宏用法中,没有"
前缀。或者,等效地
\thexintiiexpr "AAAAABBBBBCCCCCDDDDDEEEEEFFFFF99999\relax
两者都给出:
两者都只需要大写字母,就像 TeX 一样,但没有大小限制。