CSV 文件和二维码

CSV 文件和二维码

我有一个包含一些 URL 的 .csv 文件。

  • 首先,我想将每个 URL 存储在一个变量中。
  • 其次,我想打印二维码中的变量。

做到这一点最简单的方法是什么?

平均能量损失

\documentclass{article}

\usepackage{qrcode}

\usepackage{blindtext}

\begin{filecontents*}{url.csv}
url1
url2
url3
url4
url5
\end{filecontents*}

\begin{document}

\section{One}
\blindtext[1]

\qrcode[height=1in]{url1} % there should be a variable

\section{Two}
\blindtext[1]

\qrcode[height=1in]{url2} % there should be a variable

\section{Three}
\blindtext[1]

\qrcode[height=1in]{url3} % there should be a variable

\section{Four}
\blindtext[1]

\qrcode[height=1in]{url4} % there should be a variable

\section{Five}
\blindtext[1]

\qrcode[height=1in]{url5} % there should be a variable

\end{document}

答案1

不清楚“变量”是什么意思。这里我定义了一个命令\urlvar,带有一个指向相应行中的 URL 的参数。

\begin{filecontents*}{\jobname.dat}
https://tex.stackexchange.com
https://tex.stackexchange.com/questions/420647/
https://tex.stackexchange.com/questions/420647/csv-file-and-qr-codes
https://tex.stackexchange.com/users/101831/sr-schneider
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}
\usepackage{qrcode}
\usepackage{url}

\ExplSyntaxOn
\ior_new:N \g_schneider_urlfile_ior
\seq_new:N \l_schneider_urlfile_seq

\NewDocumentCommand{\readurls}{m}
 {% #1 is the name of the file
  \seq_clear:N \l_schneider_urlfile_seq
  \ior_open:Nn \g_schneider_urlfile_ior { #1 }
  \ior_str_map_inline:Nn \g_schneider_urlfile_ior
   {
    \seq_put_right:Nn \l_schneider_urlfile_seq { ##1 }
   }
  \ior_close:N \g_schneider_urlfile_ior
 }
\NewExpandableDocumentCommand{\urlvar}{m}
 {
  \seq_item:Nn \l_schneider_urlfile_seq { #1 }
 }
\ExplSyntaxOff

\begin{document}

\readurls{\jobname.dat}

\section{One}
\texttt{\urlvar{1}}

\qrcode[height=1in]{\urlvar{1}} % there should be a variable

\section{Two}
\texttt{\urlvar{2}}

\qrcode[height=1in]{\urlvar{2}} % there should be a variable

\section{Three}
\texttt{\urlvar{3}}

\qrcode[height=1in]{\urlvar{3}} % there should be a variable

\section{Four}
\texttt{\urlvar{4}}

\qrcode[height=1in]{\urlvar{4}} % there should be a variable

\end{document}

在此处输入图片描述

答案2

当你的工作文件中每行只有一个 URL 时,你不需要使用特殊的宏来读取 csv。你可以简单地使用\readTeX 原语:

{\endlinechar=-1 \global\read\urlfile to\urlvar}

如果\urlvar为空,则表示您已到达文件末尾。这意味着您可以在循环中处理所有行:

\loop
   {\endlinechar=-1 \global\read\urlfile to\urlvar}
   \if^\urlvar^\else
      ... do something with \urlvar
      \repeat

完整工作示例(读取文件url.csv)如下:

\newread\urlfile
\openin\urlfile=url.csv
\def\iterate{\body \expandafter \iterate \fi} % plain TeX correction of \loop

\input qrcode % qrcode.tex for plain TeX

\loop
   {\endlinechar=-1 \global\read\urlfile to\urlvar}
   \if^\urlvar^\else
      \noindent \qrcode{\urlvar}\qquad {\tt \urlvar}
      \bigskip
      \repeat

\bye

相关内容