Ich habe Dateien mit Fragmenten altenglischer Texte. Diese Dateien verwenden den Buchstabenwynn(ƿ ( U+01BF
) und Ƿ ( )), die ich als modernes w ( ) und W ( ) U+01F7
drucken möchte . Dies kann ich problemlos mit einer Zuordnungsdatei tun, die ich mit in die Datei ( ) kompiliert habe. Ich möchte auch die Sequenz ' ·' (Leerzeichen ( ) gefolgt von einemU+0077
U+0057
teckit_compile
.tec
teckit_compile oldenglish.map -o oldenglish.tec
U+0020
Zwischenpunkt), das in ' ·' (geschütztes Leerzeichen( U+00A0
) gefolgt von einem Interpunktionszeichen), aber das funktioniert aus irgendeinem Grund nicht.
Dies ist meine .map
Datei ( 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 ; ‘ ·’→‘ ·’
Und dies ist eine Beispiel-LaTeX-Datei und ihre Ausgabe:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=oldenglish]{Junicode}
\begin{document}
abcwxyz · ABCWXYZ
abcƿxyz · ABCǷXYZ
\end{document}
Ich weiß, U+0020 U+00B7
dass es nicht durch ersetzt wird, U+00A0 U+00B7
weil ich, wenn ich es in der letzten Zeile mit teste, U+0020 U+00B7 <> U+00A0 U+0078
nicht ,abcwxyz x ABCWXYZ‘, sondern ,abcwxyz · ABCWXYZ‘ erhalte.
Ich vermute, dass das Leerzeichen ( U+0020
) dieses Problem verursacht. Mache ich etwas falsch?
Vielen Dank! ☺
Antwort1
Die Mapping-Ersetzungen funktionieren auf Zeichenbasis, aber XeTeX verwendet niemals das Leerzeichen; vielmehr wandelt es Leerzeichen-Token in horizontale Klammern um, so dass beim Erreichen des Ersetzungsstadiums niemals eine Kombination vorliegt U+0020 U+00B7
.
Sie können newunicodechar
hierfür verwenden:
\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}
Das Interpunktionszeichen wird aktiviert; wenn es im horizontalen Modus gefunden wird und ihm ein Leerzeichen vorangestellt ist, entfernt es das Leerzeichen und fügt ein geschütztes Leerzeichen ein ~
. Anschließend wird es gedruckt.
Ich würde nicht verwenden U+00A0
, da dies ein Glyph ist und daher nicht an der Raumausdehnung oder -verkleinerung auf einer Linie teilnimmt.
Dies setzt voraus, dass · (U+00B7 MITTLERER PUNKT) nur in diesem Kontext verwendet wird. Etwas wie \hspace{10pt}·
würde auch das Leerzeichen entfernen.