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
begindocumentfl fl flenddocument
En LuaLaTeX, compila a:
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:
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
begindocumentfl fl flenddocument
Aunque el DeclareUnicodeCharacter
el comando está en inputenc
el 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.