Tenho arquivos contendo fragmentos de textos em inglês antigo. Esses arquivos usam a letraWynn(ƿ ( U+01BF
) e Ƿ ( U+01F7
)) que desejo imprimir como w ( U+0077
) e W ( U+0057
) modernos. Não tenho problemas em fazer isso usando um arquivo de mapeamento, que compilei usando teckit_compile
no .tec
arquivo ( teckit_compile oldenglish.map -o oldenglish.tec
). Eu também quero a sequência '·' (espaço ( U+0020
) seguida por uminterponto) a ser mapeado em ' ·' (Espaço inquebrável( U+00A0
) seguido de um interponto), mas por algum motivo não funciona.
Este é o meu .map
arquivo ( 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 ; ‘ ·’→‘ ·’
E este é um exemplo de arquivo LaTeX e sua saída:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}
\begin{document}
abcwxyz · ABCWXYZ
abcƿxyz · ABCǷXYZ
\end{document}
Eu sei U+0020 U+00B7
que não está sendo substituído U+00A0 U+00B7
porque quando eu testo U+0020 U+00B7 <> U+00A0 U+0078
na última linha não recebo 'abcwxyz x ABCWXYZ', mas 'abcwxyz · ABCWXYZ'.
Acho que é o espaço ( U+0020
) que causa esse problema. Estou fazendo algo errado?
Muito obrigado! ☺
Responder1
As substituições de mapeamento funcionam com base em caracteres, mas o XeTeX nunca usa o caractere de espaço; em vez disso, ele transforma os tokens de espaço em cola horizontal, de modo que, quando o estágio de substituição for alcançado, nunca haverá uma combinação U+0020 U+00B7
.
Você pode usar newunicodechar
para esta finalidade:
\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}
O caractere interponto é ativado; se for encontrado no modo horizontal e for precedido por um espaço, ele remove o espaço e insere um espaço inseparável ~
e então se imprime.
Eu não usaria U+00A0
, porque este é um glifo e, portanto, não participa do alongamento ou redução do espaço em uma linha.
Isso pressupõe que · (U+00B7 MIDDLE DOT) seja usado apenas neste contexto. Algo como \hspace{10pt}·
removeria o espaço também.