答案1
第一次尝试。我们可以根据需要生成 MetaPost 图形,但这似乎更快、更容易。使用更多命令,我们甚至可以编写一个小模块,以防其他人需要它。您只需qrencode.lua
从这里(其他文件可忽略)。
编辑:我的第一个解决方案仅适用于 ConTeXt LMTX。下一个解决方案应该适用于 MkIV 和 LMTX。不过,此时最好转向后者。
\startluacode
local table = table
local concat = table.concat
local interfaces = interfaces
local implement = interfaces.implement
local qr = require"qrencode"
local function helper(n)
if n > 0 then return 0 end
if n < 0 then return 2^24-1 end
if n == 0 then return 2^12 end --Should it happen?
end
local function qrcode_to_ctx(size, text)
local n, data, settings
local ok, content = qr.qrcode(text)
local result = ''
if not ok then
context.type(content)
else
data = {}
n = #content
settings = {
x = n,
y = n,
width = size,
height = size
}
for i = 1, n do
data[i] = {}
for j = 1, n do
data[i][j] = ('%06X'):format(helper(content[i][j]))
end
result = result .. concat(data[i])
end
context.bitmapimage(settings,result)
end
end
implement{
name = 'qrcode',
arguments = {'string', 'string'},
actions = qrcode_to_ctx
}
\stopluacode
\unprotect
\unexpanded\def\qrcode{\dosingleempty\qrcode_direct}
\def\qrcode_direct[#1]#2%
{\quitvmode\doifsomethingelse{#1}%
{\clf_qrcode{#1}{#2}}
{\clf_qrcode{1cm}{#2}}} %Change 1cm for another default
\protect
\starttext
\startTEXpage
\qrcode[5cm]{https://tex.stackexchange.com/questions/598634/qr-code-in-context}
\stopTEXpage
\stoptext