Zuordnung von „Leerzeichen + Zeichen“ zu „geschütztem Leerzeichen + Zeichen“

Zuordnung von „Leerzeichen + Zeichen“ zu „geschütztem Leerzeichen + Zeichen“

Ich habe Dateien mit Fragmenten altenglischer Texte. Diese Dateien verwenden den Buchstabenwynn(ƿ ( U+01BF) und Ƿ ( )), die ich als modernes w ( ) und W ( ) U+01F7drucken 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+0077U+0057teckit_compile.tecteckit_compile oldenglish.map -o oldenglish.tecU+0020Zwischenpunkt), das in ' ·' (geschütztes Leerzeichen( U+00A0) gefolgt von einem Interpunktionszeichen), aber das funktioniert aus irgendeinem Grund nicht.

Dies ist meine .mapDatei ( 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}

Ausgabe des vorherigen Codes

Ich weiß, U+0020 U+00B7dass es nicht durch ersetzt wird, U+00A0 U+00B7weil ich, wenn ich es in der letzten Zeile mit teste, U+0020 U+00B7 <> U+00A0 U+0078nicht ,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 newunicodecharhierfü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.

Bildbeschreibung hier eingeben

Dies setzt voraus, dass · (U+00B7 MITTLERER PUNKT) nur in diesem Kontext verwendet wird. Etwas wie \hspace{10pt}·würde auch das Leerzeichen entfernen.

verwandte Informationen