![使用标签和文本合并的 ISBN 条形码](https://linux22.com/image/370838/%E4%BD%BF%E7%94%A8%E6%A0%87%E7%AD%BE%E5%92%8C%E6%96%87%E6%9C%AC%E5%90%88%E5%B9%B6%E7%9A%84%20ISBN%20%E6%9D%A1%E5%BD%A2%E7%A0%81.png)
我正在制作一张像这样的 ISBN 条形码表:
\documentclass{article}
\usepackage{GS1}
\usepackage{textmerg}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.dat}
0201134489
978-0201529838
978-3-319-23796-1
978-0321173850
9781847199867
978-0201362992
\end{filecontents*}
\usepackage[newdimens]{labels}
\LabelCols=3
\LabelRows=5
\LabelGridtrue % show grid for labels
\begin{document}
\Fields{\isbn}
\Merge{\jobname.dat}{%
\addresslabel{
\EANBarcode{ISBN \isbn}
}%
}%
\end{document}
不幸的是,条形码全是零,而不是 ISBN 号码:
我怎样才能解决这个问题?
答案1
作为玛丽金指出,解决方案很简单,\expandafter\EANBarcode\expandafter{\isbn}
用 而不是\EANBarcode{ISBN \isbn}
。我在发布之前尝试过这个,但忘记从 GS1 文档中删除“ISBN”填充符,因此出现错误,并认为它没有解决问题。为了完整起见,下面是完整的工作示例:
\documentclass{article}
\usepackage{GS1}
\usepackage{textmerg}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.dat}
0201134489
978-0201529838
978-3-319-23796-1
978-0321173850
9781847199867
978-0201362992
\end{filecontents*}
\usepackage[newdimens]{labels}
\LabelCols=3
\LabelRows=5
\LabelGridtrue % show grid for labels
\begin{document}
\Fields{\isbn}
\Merge{\jobname.dat}{%
\addresslabel{
\expandafter\EANBarcode\expandafter{\isbn}
}%
}%
\end{document}
答案2
我最近将一个支持 ISBN 和 ISSN 的合适版本(需要 >=0.0.10)上传到 CTAN barracuda
。现在您可以自然地解决参数扩展问题,因为令牌的自动扩展被传递给 \directlua 原语。
由于捆绑包中部署了 LaTeX 包,您不需要编写 Lua 代码barracuda.sty
——barracuda 完全用 Lua 编写,并且也可以与普通解释器一起使用,例如texlua
生成 SVG 条形码。
其好处在于更复杂的输入和输出条形码处理。在您的示例中,软件包能够决定是否必须打印符号上的标签 ISBN 文本。事实上,如果没有提供关于底层 EAN 代码的附加信息,则不会进行 ISBN 标记。例如,如果输入代码中存在破折号字符,则假定这是适合添加顶部 ISBN 标签的附加信息,而如果输入代码仅仅是数字序列,则不会选择任何标签选项。
无论如何,用户可以使用选项来纠正此行为text_isbn_enable
。可接受的值为true
,false
或"auto"
为默认值。
最后要说的是,如果校验和正确,则barracuda
同样接受 ISBN 10 位长输入代码或 EAN 13 等效代码。
宏\barracuda
语法如下:\barracuda[option]{encoder}{input code}
例如:
\barracuda[text_isbn_enable = false]{ean-isbn}{0201134489}
LuaLaTeX 的代码示例如下(barracuda
不适用于 pdflatex 引擎):
% !TeX program = LuaLaTeX
\documentclass{article}
\usepackage{fontspec}
\setmainfont{ocrb10}
\usepackage{barracuda}
\usepackage{textmerg}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.dat}
0201134489
978-0201529838
978-3-319-23796-1
978-0321173850
9781847199867
978-0201362992
\end{filecontents*}
\usepackage[newdimens]{labels}
\LabelCols=3
\LabelRows=5
\LabelGridtrue % show grid for labels
\begin{document}
\Fields{\isbn}
\Merge{\jobname.dat}{%
\addresslabel{
\barracuda{ean-isbn}{\isbn}% naturally expanded
}%
}%
\end{document}
谢谢。R。