我有一个包含一些 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。你可以简单地使用\read
TeX 原语:
{\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