Штрих-коды ISBN с использованием этикеток и textmerg

Штрих-коды ISBN с использованием этикеток и textmerg

Я создаю лист штрих-кодов 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}. Я попробовал это перед публикацией, но забыл удалить заполнитель "ISBN" из документации GS1, поэтому получил ошибку и подумал, что это не решило проблему. Вот полный рабочий пример для полноты:

\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

Недавно я загрузил на CTAN подходящую версию (>=0.0.10 требуется) пакета barracudaс поддержкой ISBN и ISSN. Теперь вы можете разрешить расширение аргумента естественным образом, поскольку автоматическое расширение токенов передается примитиву \directlua.

Вам не нужно писать код Lua благодаря barracuda.styпакету LaTeX, развернутому в комплекте — barracuda полностью написана на Lua и может работать с обычным интерпретатором, например, texluaдля создания штрих-кода SVG.

Преимущество заключается в более сложной обработке входного и выходного штрихкода. В вашем примере упаковка может решить, должен ли быть напечатан текст ISBN этикетки на символе или нет. Фактически, если не предоставлено никакой дополнительной информации относительно базового кода EAN, то не создается никакой нотации ISBN. Например, если во входном коде присутствуют символы тире, то это считается дополнительной информацией, подходящей для добавления верхней этикетки ISBN, в то время как если входной код представляет собой просто последовательность цифр, то не выбирается ни один вариант этикетки.

В любом случае, пользователь может исправить это поведение с помощью опции text_isbn_enable. Принятые значения — true, falseили "auto"что это значение по умолчанию.

В качестве последнего замечания: если контрольная сумма верна, то barracudaпринимается как 10-значный входной код ISBN, так и эквивалент 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}

Спасибо. Р.

Связанный контент