我想在 LaTeX 文档中打印二维码。包\qrcode
命令的信息qrcode
将来自包的文件名varsfromjobname
。但这对我来说不起作用:
\documentclass{article}
\usepackage{qrcode}
\usepackage{varsfromjobname}
\begin{document}
\def\foo{bar}%
\def\qrinfo{\getfromjobname{2}}%
{\LARGE OK, \qrinfo\ is printable}
\qrcode{This \foo\ is working.}
\qrcode{This \qrinfo\ does not!}
\end{document}
答案1
\getfromjobname
由于使用了 ,该宏不是“完全可扩展的”,\ifthen
因此不能在 的参数中使用\qrcode
。直接使用\gettwofromjobname
即可。
如果我将文件命名为kinda-hanta.tex
并修改为
\documentclass{article}
\usepackage{qrcode}
\usepackage{varsfromjobname}
\begin{document}
\def\foo{hanta}%
\def\qrinfo{\gettwofromjobname}%
{\LARGE OK, \qrinfo\ is printable}
\qrcode{This \foo\ is working.}
\qrcode{This \qrinfo\ is working.}
\end{document}
那么结果是两个相同的二维码
的定义\getfromjobname
可以修改为
\renewcommand{\getfromjobname}[1]{%
\ifcase#1 \or
\getonefromjobname\or
\gettwofromjobname\or
\getthreefromjobname\or
\getfourfromjobname\or
\getfivefromjobname\or
\getsixfromjobname\or
\getsevenfromjobname\or
\geteightfromjobname\or
\getninefromjobname
\fi
}
问题是错误参数不会\getfromjobname
被捕获(在原始宏中它不会打印任何内容)。
\getfromjobname
以下是基于的完全可扩展版本expl3
:
\documentclass{article}
\usepackage{qrcode}
\usepackage{xparse}
\ExplSyntaxOn
% get the pieces of the file name
\seq_new:N \c_varsfromjobname_tokens_seq
\seq_set_split:NnV \c_varsfromjobname_tokens_seq { - } \c_sys_jobname_str
% the user interface
\DeclareExpandableDocumentCommand{\getfromjobname}{m}
{
\seq_item:Nn \c_varsfromjobname_tokens_seq { #1 }
}
\ExplSyntaxOff
\begin{document}
\qrcode{This hanta is working.}
\qrcode{This \getfromjobname{2} is working.}
\end{document}
varsfromjobname
这甚至克服了仅允许九件的限制。
答案2
运行pdflatex --shell-escape ...
\documentclass{article}
\usepackage[crop=off]{auto-pst-pdf}
\usepackage{pst-barcode}
\begin{document}
\pspicture(1in,1in)\psbarcode{\jobname}{}{qrcode}\endpspicture
\qquad
\pspicture(0.5in,0.5in)\psbarcode{\jobname}{format=micro}{qrcode} \endpspicture
\end{document}
或xelatex