Saltar al contenido

Carácter Unicode {U + 200B}

Luego de mucho luchar pudimos dar con el arreglo de este asunto que agunos lectores de nuestra web han presentado. Si deseas aportar algún detalle no dejes de dejar tu comentario.

Solución:

U + 200B es el espacio de ancho cero que tiene aquí:

elim‌​}

desde el final de esta línea

DeclareMultiCiteCommandparencites[mkbibparens]parencitemulticitedelim‌​

es (usando este convertidor Unicode)

  U+0065 LATIN SMALL LETTER E     e
  U+006c LATIN SMALL LETTER L     l
  U+0069 LATIN SMALL LETTER I     i
  U+006d LATIN SMALL LETTER M     m
  U+200c ZERO WIDTH NON-JOINER     ‌
  U+200b ZERO WIDTH SPACE     ​ 
  U+007d RIGHT CURLY BRACKET     } } rbrace

elimine esa línea y vuelva a escribir sin los caracteres de control invisibles entre m y }

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

Tome el siguiente ejemplo:

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

En LuaLaTeX, se compila para:

Muestra de fuente Latin Modern

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 desde la que copiaste intencionalmente: un espacio de ancho cero podría significar un posible salto de línea, como después de una barra, y un no ensamblador de ancho cero deshabilita una ligadura. Por ejemplo, se supone que la fi en Elf‌in o la fl en Half‌ling (según pedantes como yo) no deben estar ligadas, ya que pertenecen a diferentes partes de una palabra compuesta. Casi nadie se molesta en hacer eso, pero es mucho 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.

Limpia tu fuente a mano

Esto es lo que recomienda la mayoría de las personas en este sitio. 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 en tu editor

Esto es más difícil con un carácter invisible de ancho cero, pero es posible que pueda copiar un espacio de ancho cero de un mapa de caracteres, abrir su cuadro de diálogo de búsqueda y reemplazo y pegar el carácter en el campo de búsqueda. Luego puede reemplazarlo con algo como ZWS o hskip 0pt.

Limpia tu fuente con Perl

El siguiente script de 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 puede escribir esto como

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

los -CSD La opción selecciona UTF-8 incondicionalmente, incluso si no tiene UTF-8 como configuración regional predeterminada. los -pe La opción ejecuta el script Perl dado en el archivo de entrada y se imprime en el archivo de salida. los s comando hace sustitución, el N... es una expresión regular que coincide con el 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 el < y > los operadores seleccionan los archivos de entrada y salida.

Cualquiera de estos produce un archivo que se compila para:

Ejemplo de fuente Computer Modern

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"

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

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

Esto elimina todos los caracteres excepto el ASCII originalmente permitido en TeX (incluido en lugar de doble tilde).

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 inputenc, el kernel de LaTeX lo ha cargado de forma predeterminada desde 2018. Por lo tanto, podríamos haber omitido declararlo.

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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