qrcodeのパッケージもスゴイ
Mon 21 Dec 2020 by mskala Tags used: software, typography, 日本語, latex毎年日本語の練習のためにTeX & LaTeXのブログを書きます。 今年に#texadvent2020のテーマは「このパッケージもスゴイ!」とです。 さて、僕はqrcodeのパッケージがそれものです。 なぜと思いましょう。
これは「TeX & LaTeX Advent Calendar 2020」の21日目の記事です。 昨日(20日目)はwtsnjpさんでした。 明日(22日目)はMusicDumpさんです。
どこでもQRコードあります。 出荷のラベルと日本国のビサとポスターで、QRコードあります。
動物園で、スマホのカメラで写真を撮って情報のページを読みできます。
qrcodeのパッケージとTeXで、QRコードの書きことが出来ます。
使いことがやすい。
パッケージのロード後、\qrcode
のマクロあります。
\documentclass{article} \usepackage{qrcode} \begin{document} \qrcode{https://www.japari.pk/} \end{document}
デフォルトで、QRコードがリンクと思い込みます。
hyperrefのパケージでPDFのリンクを作ります。
リンクが欲しくなければ、パッケージオプションや\qrset
マクロや\qrcode
オプションや\qrcode*
マクロあります。
パッケージオプションは「nolinks」でも、他のオプションが「nolink」です。
\usepackage[nolinks]{qrcode} .. \qrset{nolink} \qrcode{https://www.japari.pk/} .. \qrcode[nolink]{https://www.japari.pk/} .. \qrcode*{https://www.japari.pk/}
QRコードの大小が重点です。 いつも正方形だから、「height」のオプションが高さと横幅です。
\qrcode[height=1cm]{https://www.japari.pk/} \quad \qrcode{https://www.japari.pk/} % 2cm ga default \quad \qrcode[height=3cm]{https://www.japari.pk/}
マニュアルで色々なオプションがあります。 使いことがやすいです。
そういえば、なぜ「スゴイ」と言いますか?
QRコードの定義は難しいです。 コードの中でたくさんな奇偶検査ビットとエラー補正ビットあります。 煩雑な階層プロトコルです。
もしかしたらLuaTeXを使えば、Lua言語でその算出ができます。 一方では、pstricksのでPostscriptのプログラムを使うことができます。 でもqrcodeのパケージがLuaTeXやpstricksを使えないです。 TeXマクロは全部の算出をしていますよ。
TeXマクロの中では、リード・ソロモン符号の実現です。
2進行列とGF(256)の算数もしています。
\advance
とか\expandafter
とか\relax
です。
ぜったいにAnders Hendrickson先生はTeXマクロを書きました。
\def\FX@polynomialdivide@recursive#1#2{% % #1 = f(x), of degree n % #2 = g(x), of degree m % Obtains a new polynomial h(x), congruent to f(x) modulo g(x), % but of degree at most n-1. % % If leading coefficient of f(x) is 0, strips off that leading zero. % If leading coefficient of f(x) is a, subtracts off a * g(x) * x^(n-m). % N.B. we assume g is monic. % \FX@testleadingcoeff(#1)% \ifFX@leadingcoeff@zero% %Leading coefficient is zero, so remove it. \xa\def\xa\FX@numerator\xa{\FX@stripleadingzero(#1)}% \else% %Leading coefficient is nonzero, and contained in \FX@leadingcoefficient \FX@subtractphase{#1}{#2}{\FX@leadingcoefficient}% \ifFX@subtract@failed% %If subtraction failed, that means our #1 was already the remainder! \FX@divisiondonetrue% \edef\qr@theremainder{#1}% \else% %xor succeeded. We need to recurse. \xa\xa\xa\edef\xa\xa\xa\FX@numerator\xa\xa\xa{\xa\FX@stripleadingzero\xa(\FX@subtraction@result)}% \fi% \fi% \addtocounter{qr@divisionsremaining}{-1}% \ifnum\c@qr@divisionsremaining=0\relax %Division is done! \FX@divisiondonetrue% \edef\qr@theremainder{\FX@numerator}% \relax% \else% \xa\FX@polynomialdivide@recursive\xa{\FX@numerator}{#2}% \fi% }%
スゴイ!
0 comments