该qrcode.sty
包用于打印二维码。它包括以下 1148-1155 行:
\def\qr@Ni{3}%
\def\qr@Nii{3}%
\def\qr@Niii{40}%
\def\qr@Niv{10}%
\def\qr@fiveones{11111}%
\def\qr@fivezeros{11111}%
\def\qr@twoones{11}%
\def\qr@twozeros{00}%
为什么是\def\qr@fivezeros{11111}
这里?更合乎逻辑的是\def\qr@fivezeros{00000}
。这似乎是拼写错误。但是,为什么包运行良好?如果我将此宏替换为,\def\qr@fivezeros{00000}
那么二维码也能正常工作(在我测试过的几个代码上),但它会在日志中打印另一个关于惩罚的部分结果。它说这个宏的改变对二维码进行了另一次内部计算。
答案1
\def\qr@fivezeros{11111}
看起来确实像是一个错误,但让我们看看为什么这个包之前能工作和改变后:
QR 码具有掩码的概念:这些基本上是用于“掩蔽”常规数据的模式,以确保避免某些模式。(例如,这试图确保用于识别 QR 码的典型嵌套框模式不会出现在意想不到的地方)有QR 码生成器可以选择五种不同的掩码。对于大多数二维码,任何掩码都可以使用,因此实际选择正确的掩码通常无关紧要,但在某些情况下,选择“正确”的掩码可以使二维码扫描速度更快和/或更可靠。
该宏\qr@fivezeros
仅用于确定掩码是否存在问题,因此更改宏只会影响掩码选择。鉴于它只是掩码选择代码中的众多因素之一,因此它通常不会真正产生影响,即使产生影响,也“仅”会导致选择次优掩码。虽然这可能会使您的代码可靠性稍差,但不会使其错误或不可读。
更具体地说,这个错误使得最终的二维码更有可能出现一行或一列中有许多彼此相邻的白色块。