TL;DR-

TL;DR-

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}"

相关内容