让 \psbarcode 接受自定义变量

让 \psbarcode 接受自定义变量

我正在尝试使用\psbarcode一种方式,即使用预制变量来呈现条形码。失败的 MWE 如下,

\documentclass{minimal}
\usepackage{auto-pst-pdf}
\usepackage{pst-barcode}

\newcommand*{\tozip}[1]{0123456789}

\begin{document}
   \begin{pspicture}\psbarcode{\tozip}{}{postnet}\end{pspicture}
\end{document}

如果我\tozip用实际数字替换它,它就会起作用...有人有一个可以与我的想法一起使用的想法\newcommand吗?

我想我举的例子有点最小...我实际上使用的scrlttr2是 KOMA 变量。上面的 MWE 在编辑完成后即可工作(谢谢!)但实际示例却不行。对这个相关示例有什么想法吗?

\documentclass[letterpaper]{scrlttr2}
\usepackage[english]{babel}
\usepackage{auto-pst-pdf}
\usepackage{pst-barcode}

\newkomavar[to_zip]{tozip}
\setkomavar{tozip}[ToZip]{02115}

\begin{document}
\begin{letter}{%
   \begin{pspicture}
    \expandafter\psbarcode\expandafter{\usekomavar{tozip}}{}{postnet}
   \end{pspicture}
}

\opening{Dear Users,}
Than you in advance for helping fix this problem!
\end{letter}
\end{document}

答案1

\usekomavar不可扩展,所以我们编写一个自己的命令:

\documentclass[letterpaper]{scrlttr2}
\usepackage[english]{babel}
\usepackage{auto-pst-pdf}
\usepackage{pst-barcode}    
\newkomavar[to_zip]{tozip}
\setkomavar{tozip}[ToZip]{02115}
\makeatletter  \def\KOMAvar#1{\@nameuse{scr@#1@var}}  \makeatother

\begin{document}

\begin{letter}{%
   \pspicture(10,10)
   \psbarcode{\KOMAvar{tozip}}{}{postnet}
   \endpspicture}

\opening{Dear Users,}
Than you in advance for helping fix this problem!
\end{letter}

\end{document}

在此处输入图片描述

答案2

您不能\usekomavar根据需要在扩展上下文中使用\expandafter

对于这个任务(但你不能使用的任何高级功能\usekomavar),你可以这样做:

\documentclass[letterpaper]{scrlttr2}
\usepackage[english]{babel}
\usepackage{auto-pst-pdf}
\usepackage{pst-barcode}

\newcommand\psbarcodekomavar[1]{%
  \begingroup\edef\x{\endgroup\noexpand\psbarcode{\csname scr@#1@var\endcsname}}\x
}

\newkomavar[to_zip]{tozip}
\setkomavar{tozip}[ToZip]{02115}


\begin{document}

\begin{letter}{%
 \begin{pspicture}
   \psbarcodekomavar{tozip}{}{postnet}
 \end{pspicture}
}

\opening{Dear Users,}
Than you in advance for helping fix this problem!
\end{letter}
\end{document}

相关内容