使用标签和文本合并的 ISBN 条形码

使用标签和文本合并的 ISBN 条形码

我正在制作一张像这样的 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}

ISBN 条形码呈现正确

答案2

我最近将一个支持 ISBN 和 ISSN 的合适版本(需要 >=0.0.10)上传到 CTAN barracuda。现在您可以自然地解决参数扩展问题,因为令牌的自动扩展被传递给 \directlua 原语。

由于捆绑包中部署了 LaTeX 包,您不需要编写 Lua 代码barracuda.sty——barracuda 完全用 Lua 编写,并且也可以与普通解释器一起使用,例如texlua生成 SVG 条形码。

其好处在于更复杂的输入和输出条形码处理。在您的示例中,软件包能够决定是否必须打印符号上的标签 ISBN 文本。事实上,如果没有提供关于底层 EAN 代码的附加信息,则不会进行 ISBN 标记。例如,如果输入代码中存在破折号字符,则假定这是适合添加顶部 ISBN 标签的附加信息,而如果输入代码仅仅是数字序列,则不会选择任何标签选项。

无论如何,用户可以使用选项来纠正此行为text_isbn_enable。可接受的值为truefalse"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。

相关内容