Tengo archivos que contienen fragmentos de textos en inglés antiguo. Estos archivos usan la letrawynn(ƿ ( U+01BF
) y Ƿ ( U+01F7
)) que quiero imprimir como w ( U+0077
) y W ( U+0057
) modernos. No tengo ningún problema en hacer esto usando un archivo de mapeo, que he compilado usando teckit_compile
el .tec
archivo ( teckit_compile oldenglish.map -o oldenglish.tec
). También quiero la secuencia ' ·' (espacio ( U+0020
) seguido de uninterpunto) que se asignará a ' ·' (espacio irrompible( U+00A0
) seguido de un interpunto), pero por alguna razón esto no funciona.
Este es mi .map
archivo ( oldenglish.map
):
LHSName "old"
RHSName "new"
pass(Unicode)
U+01BF <> U+0077 ; ‘ƿ’→‘w’
U+01F7 <> U+0057 ; ‘Ƿ’→‘W’
U+0020 U+00B7 <> U+00A0 U+00B7 ; ‘ ·’→‘ ·’
Y este es un archivo LaTeX de ejemplo y su resultado:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}
\begin{document}
abcwxyz · ABCWXYZ
abcƿxyz · ABCǷXYZ
\end{document}
Sé U+0020 U+00B7
que no está siendo reemplazado U+00A0 U+00B7
porque cuando lo pruebo U+0020 U+00B7 <> U+00A0 U+0078
en la última línea no obtengo 'abcwxyz x ABCWXYZ' sino 'abcwxyz · ABCWXYZ'.
Supongo que es el espacio ( U+0020
) el que causa este problema. ¿Estoy haciendo algo mal?
¡Muchas gracias! ☺
Respuesta1
Las sustituciones de mapeo funcionan según los caracteres, pero XeTeX nunca usa el carácter de espacio; más bien, convierte las fichas de espacio en pegamento horizontal, de modo que cuando se llega a la etapa de sustitución, nunca hay una combinación U+0020 U+00B7
.
Puedes utilizar newunicodechar
para este propósito:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}
\usepackage{newunicodechar}
\newunicodechar{·}{\ifhmode\ifdim\lastskip>0pt \unskip~\fi\fi·}
\begin{document}
abcwxyz · ABCWXYZ
abcƿxyz · ABCǷXYZ
\parbox{0pt}{
abcwxyz · ABCWXYZ
abcƿxyz · ABCǷXYZ
}
\end{document}
El carácter interpuntual se activa; si se encuentra en modo horizontal y está precedido por un espacio, elimina el espacio e inserta un espacio sin separación ~
, luego se imprime.
No usaría U+00A0
, porque es un glifo y, por lo tanto, no participa en el estiramiento o la reducción del espacio en una línea.
Esto supone que · (U+00B7 PUNTO MEDIO) se utiliza sólo en este contexto. Algo así \hspace{10pt}·
también eliminaría el espacio.