Kann man in Xelatex eine bestimmte Zeichenvariante nur für den ersten Buchstaben des Wortes festlegen?

Kann man in Xelatex eine bestimmte Zeichenvariante nur für den ersten Buchstaben des Wortes festlegen?

Ich hätte gern Code, um dokumentweit eine bestimmte Zeichenvariante für den Buchstaben „v“ festzulegen, nur wenn dieser im Wort an erster Stelle steht. Die Lösung im MWE ist keine Lösung, da ich ein Dokument mit mehreren hundert Seiten habe. Irgendwelche Vorschläge? Danke.

\documentclass[a4paper,14pt,openright,twoside]{memoir}
\usepackage[T1]{fontenc}
\usepackage[scale=1,osf,nf,lf]{ebgaramond}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{csquotes}
\usepackage{realscripts}

\begin{document}

Normal set:
{\fontshape{it}
    \addfontfeature{RawFeature=+hlig}
        \addfontfeature{CharacterVariant=5:2}
            \addfontfeature{RawFeature=+liga}
                \addfontfeature{RawFeature=+dlig}
                    \addfontfeature{RawFeature=+swsh}
                        \addfontfeature{Numbers=OldStyle}
                            \selectfont 

Ha visto un valvassore vivere come un valvassino invidioso che gridava evviva!}         

Nice to have:
{\fontshape{it}
    \addfontfeature{RawFeature=+hlig}
        \addfontfeature{CharacterVariant=5:1}
            \addfontfeature{RawFeature=+liga}
                \addfontfeature{RawFeature=+dlig}
                    \addfontfeature{RawFeature=+swsh}
                        \addfontfeature{Numbers=OldStyle}
                            \selectfont                 

Ha {\addfontfeature{CharacterVariant=5:2}v}isto un {\addfontfeature{CharacterVariant=5:2}v}alvassore {\addfontfeature{CharacterVariant=5:2}v}ivere come un {\addfontfeature{CharacterVariant=5:2}v}alvassino invidioso che gridava evviva!} 
\end{document}

Antwort1

Sie können eine Zeichenklasse verwenden:

\documentclass[a4paper,14pt,openright,twoside]{memoir}
\usepackage{fontspec}

\setmainfont{EB Garamond}[
  Numbers=Lining,
  ItalicFeatures={
    RawFeature=+hlig,
    RawFeature=+liga,
    RawFeature=+dlig,
    RawFeature=+swsh,
    Numbers=OldStyle,
  },
]
\newfontfamily\varv{EB Garamond}[
  Numbers=Lining,
  ItalicFeatures={
    RawFeature=+hlig,
    RawFeature=+liga,
    RawFeature=+dlig,
    RawFeature=+swsh,
    Numbers=OldStyle,
    CharacterVariant=5:2,
  },
]

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\vclass
\XeTeXcharclass`v=\vclass
\XeTeXinterchartoks 255 \vclass = {\openswashv}

\makeatletter
\newcommand\openswashv{%
  % by preceding the v with U+200C it's not at the boundary any more
  \ifnum\strcmp{\f@shape}{it}=\z@
    \begingroup\varv^^^^200cv\endgroup
    \nobreak\hspace{0pt}% allow hyphenation in the rest of the word
    \expandafter\@gobble
  \fi
}
\makeatother


\begin{document}

Normal font:
  Ha visto un valvassore vivere come un valvassino invidioso che gridava evviva!

Italic font: {\itshape
  Ha visto un valvassore vivere come un valvassino invidioso che gridava evviva!
}

\end{document}

Dies ermöglicht die Silbentrennung für den Rest des Wortes (könnte aber bei anderen Sprachen als Italienisch zu falschen Trennstellen führen). Ich habe nachgeschaut und EB Garamond definiert kein Unterschneidungspaar zwischen vund einem anderen Buchstaben.

Sie sollten den Schriftartenentwickler nach einem Stilsatz fragen.

Bildbeschreibung hier eingeben

verwandte Informationen