Estou fazendo uma folha de códigos de barras ISBN como esta:
\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}
Infelizmente, os códigos de barras são todos zeros em vez de números ISBN:
Como posso consertar isso?
Responder1
ComoMarijnapontou, a solução é tão simples quanto \expandafter\EANBarcode\expandafter{\isbn}
em vez de \EANBarcode{ISBN \isbn}
. Tentei fazer isso antes de postar, mas esqueci de remover o preenchimento "ISBN" da documentação do GS1, então recebi um erro e pensei que não havia resolvido o problema. Aqui está o exemplo completo de trabalho para completar:
\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}
Responder2
Recentemente carreguei no CTAN uma versão adequada (>=0.0.10 é necessária) do pacote barracuda
com suporte para ISBN e ISSN. Agora você pode resolver a expansão do argumento naturalmente devido à expansão automática dos tokens, sendo passado para a primitiva \directlua.
Você não precisa escrever código Lua graças ao barracuda.sty
pacote LaTeX implantado no pacote --- barracuda é inteiramente escrito em Lua e pode funcionar também com um interpretador normal, como texlua
para produzir código de barras SVG.
O benefício consiste em um processamento de códigos de barras de entrada e saída mais sofisticado. No seu exemplo, o pacote é capaz de decidir se o texto do rótulo ISBN no símbolo deve ser impresso ou não. Na verdade, se nenhuma informação adicional for fornecida em relação ao código EAN subjacente, nenhuma notação ISBN será feita. Por exemplo, se no código de entrada estiverem presentes traços, então esta é considerada uma informação adicional adequada para a adição do rótulo ISBN superior, enquanto se o código de entrada for apenas uma sequência de dígitos, nenhuma opção de rótulo é escolhida.
De qualquer forma, o usuário poderia corrigir esse comportamento com a opção text_isbn_enable
. O valor aceito é true
, false
ou "auto"
é o padrão.
Como observação final, se a soma de verificação estiver correta, barracuda
aceita igualmente como código de entrada ISBN de 10 dígitos ou equivalente EAN 13.
A \barracuda
sintaxe da macro é: \barracuda[option]{encoder}{input code}
como em:
\barracuda[text_isbn_enable = false]{ean-isbn}{0201134489}
O exemplo de código para LuaLaTeX é o seguinte ( barracuda
não funciona com o mecanismo 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}
Obrigado. R.