我正在尝试使用\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}