使用標籤和文字合併的 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

barracuda我最近向 CTAN 上傳了一個支援 ISBN 和 ISSN 的軟體包的合適版本(需要 >=0.0.10) 。現在您可以自然地解決參數擴展,因為標記的自動擴展被傳遞給 \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。

相關內容