我正在尝试使用qrcode
包和luaLaTeX
引擎在 QRcode 中编码捷克名称。一些重音符号被编码在 QRcode 中,而阅读器(QR Code Reader 或 QR Extrme,均在 Xperia L1 上运行)无法解码它们并尝试重新聚焦。相同大小的正确 QR 码在几秒钟内被解码。
有没有什么办法可以修复这些失效的字符?QR 码可以对此类字符进行编码。
基于 MWEAlan Munn 的回答:
\documentclass{article}
\usepackage{fontspec}
\usepackage[english,french,czech]{babel}
\usepackage[]{qrcode}
\begin{document}
\qrcode[]{í}% produces no error, resolved
\bigskip
\qrcode[]{š}% produces no error, unresolved
\bigskip
%Dummy text containing all the weird czech characters.
\qrcode[]{Příliš žluťoučký kůň úpěl ďábelské ódy}% Unresolvable
\end{document}
可解析的虚拟文本由goqr.me包含奇怪的字符:
答案1
您可以使用 expl3 将输入转换为字节:
\documentclass{article}
\usepackage{fontspec}
\usepackage{expl3}
\usepackage[]{qrcode}
\begin{document}
\ExplSyntaxOn
\str_set_convert:Nnnn \l_tmpa_str {Příliš~žluťoučký~kůň~úpěl~ďábelské~ódy}{}{utf8/bytes}
\exp_args:No\qrcode{\l_tmpa_str}
\ExplSyntaxOff
\end{document}
添加
以下适用于 pdflatex 和 lualatex。它假定文件是 utf8 编码的,并且输入不包含命令。有两个特殊输入:\\
强制换行和\%
提供百分号字符。
\documentclass{article}
\usepackage{xparse}
\usepackage[forget]{qrcode}
\makeatletter
% for pdftex is it needed to suppress the writing of arbitrary bytes to the aux:
\def\qr@writebinarymatrixtoauxfile#1{}%
\makeatletter
\ExplSyntaxOn
\cs_generate_variant:Nn \str_set_convert:Nnnn {Nnno}
\tl_new:N\g__ufqr_convert_method_tl
\seq_new:N\l__ufqr_tmpa_seq
\seq_new:N\l__ufqr_tmpb_seq
\sys_if_engine_pdftex:TF
{
\tl_gset:Nn\g__ufqr_convert_method_tl {}
}
{
\tl_gset:Nn\g__ufqr_convert_method_tl {utf8/bytes}
}
\NewDocumentCommand \unicodeqrcode { m }
{
\tl_set:Nn \l_tmpa_tl { #1 }
\regex_replace_all:nnN {\c{\%}}{\cO\%} \l_tmpa_tl
\seq_clear:N \l__ufqr_tmpa_seq
\seq_clear:N \l__ufqr_tmpb_seq
\exp_args:NNno\seq_set_split:Nnn \l__ufqr_tmpa_seq { \\ } { \l_tmpa_tl}
\seq_map_inline:Nn \l__ufqr_tmpa_seq
{
\str_set_convert:Nnno \l_tmpa_str { ##1 } {}{\g__ufqr_convert_method_tl}
\seq_put_right:No\l__ufqr_tmpb_seq {\l_tmpa_str}
}
\exp_args:Nx\qrcode{ \seq_use:Nn \l__ufqr_tmpb_seq {\tl_to_str:N \? } }
}
\ExplSyntaxOff
\begin{document}
\unicodeqrcode{Umlaute: äüö\\Zweite &$_\^\% Zeile\\Grüße und ❤ und eine
答案2
qrcode.tex
说:
非 ASCII 字符
如果您将 csplain 与 pdfTeX 一起使用(没有 XeTeX,没有 LuaTeX),那么 UTF-8 输入将从 \qrcode 参数正确解释。
技术背景:在扫描 \qrcode 参数时,encTeX 的 \mubyte 被设置为零,因此该参数是原始的 UTF-8 编码,这对于 QR 码来说是正确的。
问题:
- 您不能在另一个宏中使用 \qrcode{parameter},因为 UTF-8 编码的参数已经被重新编码。
- 您不能使用 XeTeX 或 LuaTeX,因为 UTF-8 编码的参数已重新编码为 Unicode。并且此处未在宏级别实现从 Unicode 到 UTF-8 的反向转换。
就我的情况而言,这两个问题都是无法避免的。
相同的代码,除了一行\usepackage{fontspec}
产生以下结果: