来自 jobname 的二维码

来自 jobname 的二维码

我想在 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

在此处输入图片描述

相关内容