「スペース + 文字」を「改行なしスペース + 文字」にマッピングする

「スペース + 文字」を「改行なしスペース + 文字」にマッピングする

私は古英語のテキストの断片を含むファイルを持っています。これらのファイルでは文字ウィン(ƿ ( U+01BF) とǷ ( )) を現代の w ( ) と W ( )U+01F7として印刷したい。これは、ファイル ( )を使用してコンパイルしたマッピングファイルを使用して問題なく実行できます。また、シーケンス ' ·' (スペース ( ) の後にU+0077U+0057teckit_compile.tecteckit_compile oldenglish.map -o oldenglish.tecU+0020句点) は ' ·' ( にマッピングされます改行なしスペース( U+00A0) の後に句読点が続く) という形式がありますが、何らかの理由で機能しません。

これは私のファイルです.mapoldenglish.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 ; ‘ ·’→‘ ·’

これは LaTeX ファイルとその出力の例です。

\documentclass{article}

\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}

\begin{document}
abcwxyz · ABCWXYZ

abcƿxyz · ABCǷXYZ
\end{document}

前のコードの出力

最後の行でテストすると、「abcwxyz x ABCWXYZ」ではなく「abcwxyz · ABCWXYZ」になるためU+0020 U+00B7、 が に置き換えられていないことがわかります。U+00A0 U+00B7U+0020 U+00B7 <> U+00A0 U+0078

この問題の原因はスペース ( U+0020) だと思います。何か間違っているのでしょうか?

ありがとうございました!☺

答え1

マッピング置換は文字ベースで機能しますが、XeTeX はスペース文字を使用することはありません。むしろ、スペース トークンを水平グルーに変更するため、置換段階に達したときに組み合わせが存在しませんU+0020 U+00B7

newunicodecharこの目的には以下を使用できます:

\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}

句読点文字がアクティブになります。句読点文字が水平モードで見つかり、その前にスペースがある場合は、スペースを削除して改行なしのスペースを挿入し~、句読点文字自体を印刷します。

U+00A0これはグリフなので、行上のスペースの伸縮には関与しないため、使用しません。

ここに画像の説明を入力してください

これは、· (U+00B7 MIDDLE DOT) がこのコンテキストでのみ使用されていることを前提としています。 のようにすると、\hspace{10pt}·スペースも削除されます。

関連情報