QR 码中的特殊字符

QR 码中的特殊字符

我正在尝试从文件中读取 URL 列表并为其创建二维码。如果它们包含#示例中的“like”,我会得到一个

\qr@texttoencode 定义中的参数编号非法

错误。是否可以在不编辑输入文件并转义其中的特殊字符的情况下完成此操作?

\documentclass{article}
\usepackage{qrcode}

\begin{filecontents*}{urls.txt}
http://example.org/foo#bar
\end{filecontents*}

\def\loadurls#1{%
    \newread\file
    \openin\file=#1
    \begingroup\endlinechar=-1
    \loop\unless\ifeof\file
    \read\file to \fileline
    \qrcode{\fileline}
    \repeat
    \endgroup
    \closein\file
}

\begin{document}
    \loadurls{urls.txt}
\end{document}

答案1

另一种解决方案是使用csvsimple。请查看3.6 特殊字符文档中csvsimple提供了其他选项来转义特殊字符。在这里,我使用respect sharp=true# 将 # 解释为普通字符:

\documentclass{article}
\usepackage{csvsimple}
\usepackage{qrcode}

\begin{filecontents}[overwrite,noheader]{urls.txt}
http://example.org/foo#bar
http://www.ctan.org
\end{filecontents}

\begin{document}
    
\csvreader[nohead,respect sharp=true]{urls.txt}{}{\qrcode{\csvcoli}\quad}
    
\end{document}

在此处输入图片描述

答案2

您应该使用\readstring而不是\read。顺便说一句,\newread应该超出 的定义\loadurls(并且您应该使用与 不同的名称\file)。

这是一个expl3版本:

\begin{filecontents*}[overwrite]{\jobname.dat}
http://example.org/foo#bar
https://tex.stackexchange.com/questions/594413/special-characters-in-qr-code#594426
\end{filecontents*}

\documentclass{article}
\usepackage{qrcode}

\ExplSyntaxOn

\NewDocumentCommand{\loadurls}{m}
 {
  \patheticpat_loadurls:n { #1 }
 }

\ior_new:N \g_patheticpat_loadurls_ior

\cs_new_protected:Nn \patheticpat_loadurls:n
 {
  \ior_open:Nn \g_patheticpat_loadurls_ior { #1 }
  \ior_str_map_inline:Nn \g_patheticpat_loadurls_ior
   {
    \qrcode{##1}\par\medskip
   }
 }

\ExplSyntaxOff

\begin{document}

\loadurls{\jobname.dat}

\end{document}

在此处输入图片描述

相关内容