混淆 TeX

混淆 TeX

鉴于 TeX 的 catcode 系统,我想可以混淆TeX 的程度令人惊叹。为了更多地了解 TeX 的内部结构,我想问:我该如何向我的文档中添加一段模糊代码?假设我想在我的文档中添加一个水印,但不想让我的合著者能够编辑。我该怎么做?

我可以使用什么技巧来使某段代码更难理解?

答案1

试用十二.tex。这是一个纯TeX 文件,你可以在 CTAN 上找到它。

和恩里科“埃格尔”格雷戈里奥提出了类似的代码,甚至更短。参见你见过用 TeX 做过的最奇怪的事情是什么,它被称为xcix.tex

答案2

如果您使用的是 XeTeX,这里有一些(稍微模糊的)代码来将\pAscii 字符对打包()成一个 Unicode 字符,将结果存储在\toks0(令牌寄存器,我在\|下面调用它)中,或者解包(\u)结果。

编码利用了这样一个事实:可见的 ascii 字符在(空格) 和(波浪符号)\number`之间有一个字符代码 (用 访问) ,因此可以通过移动 将它们存储在两位数字中。然后通过添加(减去 的两次移位,因此,减去定义中的隐藏,因此)将四位数字打包成一个字符,以确保这给出 5 位数字(从 1 开始)。32127321000032676832\.6736

解码一次读取一个字符,直到\number`,得到1,后跟两对数字。我们将32每对数字相加,将的大写代码设置.为该值,并存储\uppercase{.}在中\|

\iffalse通过在打包和拆包时在正确的位置插入可以停止循环。

% Packing 2 ascii char per Unicode char with XeTeX.
\begingroup
\toksdef\|0
\let\ea\expandafter
\def\>{\uppercase{\|\ea{\the\|.}}}
\def\.{\uccode`.\numexpr32+}
\def\p#1{\|{}\ea\q#1\ {\ \iffalse}\ \fi\relax}
\def\q#1#2{\.\number`#100+`#2+6736\>\q}
\def\u#1{\|{}\ea\v\number`#1 \^^J{\iffalse}..\fi\relax}
\def\v1#1#2#3#4{\.#1#2\>\.#3#4\>\ea\v\number`}
% Example
\p{The\ main\ author\ is\ Seamus!}\showthe\|
\ea\u\ea{\the\|}\showthe\|
\endgroup
\csname @@end\endcsname\end

组的存在是为了避免泄露定义。当然,您可能只想保留 的定义,并在文档中\u写入。\u{㮨䈄䃉䠨䘾❙䝼㭁䃁䢗❴}\message{\the\|}

答案3

我刚刚发现\char

\documentclass{article}
\begin{document}
\char'110 \char'105 \char'114 \char'114 \char'117 \kern .8em \char'127 \char'117\char'122 \char'114 \char'104
\end{document}

另外,我想知道在文档全部扩展为原始内容后,是否有办法访问文档的外观。我认为这本身就相当令人困惑...

相关内容