Códigos de barras ISBN usando etiquetas e textmerg

Códigos de barras ISBN usando etiquetas e textmerg

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:

Códigos de barras com apenas zeros

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}

Códigos de barras ISBN renderizados corretamente

Responder2

Recentemente carreguei no CTAN uma versão adequada (>=0.0.10 é necessária) do pacote barracudacom 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.stypacote LaTeX implantado no pacote --- barracuda é inteiramente escrito em Lua e pode funcionar também com um interpretador normal, como texluapara 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, falseou "auto"é o padrão.

Como observação final, se a soma de verificação estiver correta, barracudaaceita igualmente como código de entrada ISBN de 10 dígitos ou equivalente EAN 13.

A \barracudasintaxe 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 ( barracudanã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.

informação relacionada