我有包含古英語文字片段的文件。這些文件使用字母永利(ƿ ( U+01BF
) 和 Ƿ ( U+01F7
)) 我想將其列印為現代 w ( U+0077
) 和 W ( U+0057
)。我使用映射文件來做到這一點沒有問題,我已將其編譯到文件( )teckit_compile
中。我還想要序列「·」(空格 ( ) 後面接著.tec
teckit_compile oldenglish.map -o oldenglish.tec
U+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}·
也會刪除空間。