Saltar al contenido

! Error de entrada del paquete: Unicode char (U+200B)?

Posterior a de una larga búsqueda de información dimos con la solución este rompecabezas que tienen ciertos los lectores. Te dejamos la solución y deseamos resultarte de mucha ayuda.

Solución:

Hay cuatro caracteres U+200B (ESPACIO DE ANCHO CERO) entre clouds y publics/privés. Una solución simple es eliminar el espacio con el p y vuelva a escribirlos. Tal vez, estos caracteres fueron introducidos por el editor o alguna operación de copiar/pegar.

Este es uno de los principales éxitos de U+200B y LaTeX, así que publicaré soluciones aquí.

Tome el siguiente ejemplo:

tracinglostchars=2
documentclassarticle
pagestyleempty
begindocumentf​l f‌l flenddocument

En LuaLaTeX, compila a:

Muestra de fuente latina moderna

El primer fl no tiene ligadura porque inserté U+200B, un espacio de ancho cero. El segundo no tiene ligadura porque inserté U+200C, un no ensamblador de ancho cero. Estos podrían haber estado en la fuente original de la que copió intencionalmente: un espacio de ancho cero podría significar un posible salto de línea, como después de una barra oblicua, y un no ensamblador de ancho cero deshabilita una ligadura. Por ejemplo, el fi en Elfin o el fl en Halfling (según pedantes como yo) no se supone que estén ligados, ya que pertenecen a diferentes partes de una palabra compuesta, pero esto es más común en algunos otros idiomas.

Si intenta compilarlo en PDFLaTeX, obtendrá el mensaje de error que lo trajo aquí:

! Package inputenc Error: Unicode character ​ (U+200B)
(inputenc)                not set up for use with LaTeX.

Hay varias formas de solucionarlo.

Limpie su fuente a mano

Esto es lo que la mayoría de la gente en este sitio recomienda. Es posible que su editor tenga una forma de mostrar caracteres especiales para que pueda eliminarlos todos. Pero realmente, ¿no es este un trabajo para una computadora?

Limpia tu fuente con Perl

El siguiente script Perl de una línea creará un nuevo archivo fuente con todos los espacios de ancho cero eliminados:

perl -CSD -pe "s/NU+200B//gu" < U200B.tex > noU200B.tex

Si es más fácil de recordar, también podría escribir esto como

perl -CSD -pe "s/NZERO WIDTH SPACE//gu" < U200B.tex > noU200B.tex

Él -CSD La opción selecciona UTF-8 incondicionalmente, incluso si no tiene UTF-8 como configuración regional predeterminada. Él -pe La opción ejecuta el script Perl dado en el archivo de entrada y lo imprime en el archivo de salida. Él s el comando hace la sustitución, el N... es una expresión regular que coincide con un espacio de ancho cero, el campo vacío entre // significa reemplazar con nada, y gu significa reemplazar todas las instancias globalmente en el Unicode string. Entonces la < y > los operadores seleccionan los archivos de entrada y salida.

Cualquiera de estos produce un archivo que compila a:

Ejemplo de fuente moderna de computadora

También es posible eliminar automáticamente todos los caracteres fuera de un subconjunto determinado. La secuencia de comandos

perl -CSD -pe "s/[^pWordpPunctpSymbolpMarkpPerlSpace]//gu"

solo permite lo siguiente: caracteres de "palabra" Unicode, puntuación, símbolos, acentos y algunos tipos de espacios. Borra la mayoría de los caracteres invisibles. Una versión aún más restrictiva sería

perl -CSD -pe "s/[^pASCII]//gu"

Esto limpia todos los caracteres excepto el ASCII originalmente permitido en TeX (incluido en lugar de doble acento grave).

Y sí, podríamos reemplazar el espacio de ancho cero por algo en lugar de nada. La secuencia de comandos

perl -CSD -pe "s/NZERO WIDTH SPACE/\\hskip 0pt/gu; s/NZERO WIDTH NON-JOINER//gu"

dado el MWE anterior como entrada, produce la siguiente salida:

tracinglostchars=2
documentclassarticle
pagestyleempty
begindocumentfhskip 0ptl fl flenddocument

Enseñe a LaTeX a comprender el espacio de ancho cero

Si el problema es que U+200B "no está configurado para usarse con LaTeX", pero es equivalente a un comando TeX:hskip 0pt o hspace0pt son espacios de ancho cero que evitan las ligaduras y permiten un posible salto de línea; podemos configurar el carácter para usar ese comando.

tracinglostchars=2
documentclassarticle
usepackageiftex
pagestyleempty

ifTUTeX
  usepackagefontspec
else
  usepackage[T1]fontenc
  usepackage[utf8]inputenc % The default since 2018
  DeclareUnicodeCharacter200Bhskip 0pt
fi

begindocumentf​l f‌l flenddocument

Aunque el DeclareUnicodeCharacter el comando está en inputencel kernel de LaTeX lo ha cargado de forma predeterminada desde 2018. Por lo tanto, podríamos habernos saltado su declaración.

Estos errores son difíciles de depurar porque si tiene un documento largo y luego agrega una cita a una entrada bibtex que tiene un carácter no Unicode, es bastante difícil saber qué cita es el problema y dónde buscar.

Mi solución fue hacer lo siguiente:

Correr pdflatex o lo que sea, en la línea de comando. Esto le da el error en formato de "consola", así:

Package inputenc Error: Unicode char ́ (U+301) not set up for use with LaTeX 

Luego podría copiar/pegar el carácter ofensivo (en mi caso, un acento extraño en un poco de texto en español) y pegarlo en el siguiente comando:

rgrep  ́ 

Esto me permitió encontrar el elemento ofensivo en uno de mis archivos .bib y pude corregirlo y seguir con mi vida.

Reseñas y valoraciones

Si posees algún disgusto o capacidad de regenerar nuestro reseña te proponemos dejar una crónica y con placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *