ConTeXt 中的二维码

ConTeXt 中的二维码

在 LaTeX 中有一个二维码包。有没有办法在 ConTeXt 中创建二维码?

像这样:

\qr[1in]{Your text to be QR encoded here}

答案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

在此处输入图片描述

相关内容