我正在尝试缓存宏的结果,类似于那个问题,但宏的参数可以包含任意字符,因此不适合放在里面\csname ... \endcsname
。
所以,我很好奇:肯定有一些 TeX 核心或软件包包含计算哈希、MD5 或其他(我并不关心是哪种)的功能。但是……我找不到它。我从grep
TeXlive 树中得到的唯一结果是pdfmdfivesum
,但它只适用于文件,而不是字符串。
那么:是否有现成的哈希计算宏/包可用?
答案1
\pdfmdfivesum
也适用于任意字符串:
\pdfmdfivesum{Hello World}
结果:
B10A8DB164E0754105B7A99BE72E3FE5
可以解码十六进制字符串以节省空间:
\pdfunescapehex{\pdfmdfivesum{Hello World}}
\pdfmdfivesum
是可扩展的,可以在内部使用\edef
。
\pdfmdfivesum
file
仅当给出关键字时才对文件起作用:
\pdfmdfivesum file {<filename>}
包裹pdftexcmds
\pdfmdfivesum
在 pdfTeX 中,DVI 和 PDF 两种模式均可用。该包pdftexcmds
定义了 LuaTeX 中缺少的 pdfTeX 原语。该包也可在纯 TeX ( \input pdftexcmds.sty
) 中使用。命令名称使用前缀\pdf@
而不是\pdf
:
\pdf@mdfivesum{Hello World}
特克斯
- 旧版本,例如 XeTeX (3.14159265-2.6-0.99992),不支持 MD5 和。
\pdffivesumm
在 pdfTeX 0.99993 版本左右添加,后来重命名为\mdfivesum
。因此,当前版本 (3.14159265-2.6-0.99996) 通过 计算 MD5 和\mdfivesum
。还file
支持与 pdfTeX 相同的关键字。