將“空格+字元”映射為“不間斷空格+字元”

將“空格+字元”映射為“不間斷空格+字元”

我有包含古英語文字片段的文件。這些文件使用字母永利(ƿ ( U+01BF) 和 Ƿ ( U+01F7)) 我想將其列印為現代 w ( U+0077) 和 W ( U+0057)。我使用映射文件來做到這一點沒有問題,我已將其編譯到文件( )teckit_compile中。我還想要序列「·」(空格 ( ) 後面接著.tecteckit_compile oldenglish.map -o oldenglish.tecU+0020間斷) 被映射到 '·' (不間斷空格( U+00A0) 後面接著一個 Interpunct),但這由於某些原因不起作用。

這是我的.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}

前面程式碼的輸出

我知道U+0020 U+00B7不會被替換,U+00A0 U+00B7因為當我在最後一行測試它時,U+0020 U+00B7 <> U+00A0 U+0078我沒有得到“abcwxyz x ABWXYZ”,而是得到“abcwxyz·ABCWXYZ”。

我猜是空格 ( 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}·也會刪除空間。

相關內容