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