TL;DR-
作品
\psbarcode{NODATA}{height=0.33 width=1.6 includecheck includetext}{code128}
但“参数化”不能按预期工作(产生大的透明输出)
\def\h{0.33}
\def\w{1.6}
\psbarcode{NODATA}{height=\h width=\w includecheck includetext}{code128}
原因:我希望允许用户指定这些内容\h
,并将其\w
作为命令行参数此解决方案。
更具体
鉴于:nodata.tex
\documentclass{standalone}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf} % pdflatex require -shell-escape option!!!
\begin{document}
\begin{pspicture}
\psbarcode{NODATA}{height=0.33 width=1.6 includecheck includetext}{code128}
\end{pspicture}
\end{document}
和
$ pdflatex -shell-escape nodata.tex && convert -density 300x300 nodata.{pdf,png} && display nodata.png
正确生成nodata.pdf
并且nodata.png
:
但是当我将 psbarcode 参数更改为使用时\h
\w
,\psbarcode{NODATA}{height=\h width=\w includecheck includetext}{code128}
它会停止渲染,并导致出现很大的透明输出。 完整的工作方式与预期代码不同:
\documentclass{standalone}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf} % pdflatex require -shell-escape option!!!
\begin{document}
\begin{pspicture}
\def\h{0.33}
\def\w{1.6}
\def\d{DATA}
\psbarcode{\d}{height=\h width=\w includecheck includetext}{code128}
\end{pspicture}
\end{document}
渲染相同但较小的分辨率(30x30),结果是大的:
$ pdflatex -shell-escape nodata.tex && convert -density 30x30 nodata.{pdf,png} && display nodata.png
为了完整性,大透明的输出:
答案1
问题在于键值对之间用空格分隔,并且
\psbarcode{NODATA}{height=\h width=\w includecheck includetext}{code128}
有不\h
和后面的空格\w
,因为它们在标记化时会被忽略。
我尝试使用height={\h}
或,{height=\h}
但都不起作用。一种解决方法是使用参数文本定义宏:
\documentclass[border=4]{standalone}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf} % pdflatex require -shell-escape option!!!
\begin{document}
\begin{pspicture}
\def\h/{0.33}
\def\w/{1.6}
\psbarcode{NODATA}{height=\h/ width=\w/ includecheck includetext}{code128}
\end{pspicture}
\end{document}
或者:
\documentclass[border=4]{standalone}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf} % pdflatex require -shell-escape option!!!
\newcommand{\psbarcodemacro}[3]{%
\begingroup\edef\x{\endgroup
\noexpand\psbarcode{#1}{#2}{#3}%
}\x
}
\begin{document}
\begin{pspicture}
\def\h{0.33 }
\def\w{1.6 }
\psbarcodemacro{NODATA}{height=\h width=\w includecheck includetext}{code128}
\end{pspicture}
\end{document}
答案2
在 中留一个空格 \def
或者\space
在 中使用\psbarcode
\documentclass[border=4,pstricks]{standalone}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf} % pdflatex require -shell-escape option!!!
\begin{document}
\begin{pspicture}(0,-0.2)(1.6in,0.5in)
\def\h{0.33 }
\def\w{1.6 }
\psbarcode{NODATA}{height=\h width=\w includecheck includetext}{code128}
\end{pspicture}
\begin{pspicture}(0,-0.2)(1.6in,0.5in)
\def\h{0.33}
\def\w{1.6}
\psbarcode{NODATA}{height=\h\space width=\w\space includecheck includetext}{code128}
\end{pspicture}
\end{document}
您可以从命令行运行
xelatex --shell-escape "\def\d{DATA} \def\w{0.33} \def\h{1.6} \input{t.tex}"