Códigos de barras ISBN mediante etiquetas y combinación de textos

Códigos de barras ISBN mediante etiquetas y combinación de textos

Estoy haciendo una hoja 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}

Desafortunadamente, los códigos de barras son todos ceros en lugar de números ISBN:

Códigos de barras con solo ceros

¿Cómo puedo arreglar esto?

Respuesta1

ComomarijnComo señaló, la solución es tan simple como \expandafter\EANBarcode\expandafter{\isbn}en lugar de \EANBarcode{ISBN \isbn}. Intenté esto antes de publicar, pero olvidé eliminar el relleno "ISBN" de la documentación de GS1, así que recibí un error y pensé que no había solucionado el problema. Aquí está el ejemplo de trabajo completo para que esté completo:

\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 representados correctamente

Respuesta2

Recientemente subí a CTAN una versión adecuada (se requiere>=0.0.10) del paquete barracudacon soporte para ISBN e ISSN. Ahora puede resolver la expansión del argumento de forma natural porque la expansión automática de los tokens se pasa a la primitiva \directlua.

No necesita escribir código Lua gracias al barracuda.stypaquete LaTeX implementado en el paquete. Barracuda está escrita completamente en Lua y puede funcionar también con un intérprete normal como texluapara producir códigos de barras SVG.

El beneficio consiste en un procesamiento más sofisticado de códigos de barras de entrada y salida. En su ejemplo, el paquete puede decidir si el texto ISBN de la etiqueta sobre el símbolo debe imprimirse o no. De hecho, si no se proporciona información adicional con respecto al código EAN subyacente, no se realiza ninguna notación ISBN. Por ejemplo, si en el código de entrada hay caracteres de guión, se supone que se trata de información adicional adecuada para agregar la etiqueta ISBN superior, mientras que si el código de entrada es simplemente una secuencia de dígitos, no se elige ninguna opción de etiqueta.

De todos modos, el usuario podría corregir este comportamiento con la opción text_isbn_enable. El valor aceptado es true, falseo "auto"que sea el predeterminado.

Como observación final, si la suma de verificación es correcta, barracudase acepta igualmente un código de entrada ISBN de 10 dígitos o un equivalente EAN 13.

La \barracudasintaxis de la macro es: \barracuda[option]{encoder}{input code}como en:

\barracuda[text_isbn_enable = false]{ean-isbn}{0201134489}

El ejemplo de código para LuaLaTeX es el siguiente ( barracudano funciona con el motor 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}

Gracias. r.

información relacionada