\addfontfeatures-Attribut geht nach dem nächsten Fontspec-Befehl verloren (wie \textbf{})

\addfontfeatures-Attribut geht nach dem nächsten Fontspec-Befehl verloren (wie \textbf{})
  1. Ich verwende Linux Libertine Schriftart (vom System) mitXeTeX.
  2. Im Textkörper verwende ich OldStyleZiffern, während ich auch Liningin den Tabellen Ziffern haben möchte.
  3. Ich setze Tabellen, die einige Zellen mit \bfseriesText enthalten.

Allerdings \addfontfeaturewird die Einstellung nur auf normalen Text angewendet, nicht jedoch auf Text, der in gesetzt ist \bfseries.

MWE

\documentclass{scrartcl}
\usepackage{array,booktabs,fontspec}
\setmainfont[Ligatures={Common},Numbers={OldStyle}]{Linux Libertine O}

\begin{document}
\begin{table}
  \addfontfeature{Numbers={Lining}}
  \begin{tabular}{>{\bfseries}ll} \toprule
    3 & 3 \\ \bottomrule
  \end{tabular}
\end{table}
\end{document}

Dies ergibt:

Ziffern in <code>\bfseries</code> sind immer noch <code>OldStyle</code>

Wie kann ich \addfontfeatures{Numbers={Lining}}die Anwendung auf den gesamten Text einer Gruppe einstellen?

Antwort1

Das Problem ist ohne Tabelle reproduzierbar:

\documentclass{scrartcl}
\usepackage{array,booktabs,fontspec}
\setmainfont[Ligatures={Common},Numbers={OldStyle}]{Linux Libertine O}

\begin{document}

1234567890

{\addfontfeatures{Numbers=Lining}

1234567890

\normalfont 1234567890

\bfseries 1234567890}

1234567890

\end{document}

Bildbeschreibung hier eingeben

Wie Sie sehen, setzt der Aufruf von \normalfontdie Funktionen auf den anfangs angegebenen Wert zurück. Der \bfseriesBefehl führt aus \fontseries{\bfdefault}\selectfont, wodurch die ausgewählte Funktion ungültig wird.

Ich rate dazu, dies \addfontfeaturesnach Möglichkeit zu vermeiden, selbst wenn dies zu einer Duplizierung des Codes führt.

\documentclass{scrartcl}
\usepackage{array,booktabs,fontspec}
\setmainfont[Ligatures={Common},Numbers={OldStyle}]{Linux Libertine O}
\newfontfamily{\mainlining}[Ligatures=Common,Numbers=Lining]{Linux Libertine O}

\begin{document}

\begin{table}
\mainlining

\begin{tabular}{>{\bfseries}ll}
\toprule
3 & 3 \\
\bottomrule
\end{tabular}

\end{table}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Verwenden

 \documentclass{scrartcl}
 \usepackage{array,booktabs,fontspec}
 \usepackage[oldstyle]{libertine}
 \defaultfontfeatures{Ligatures=Common}
 \begin{document}

\begin{table}[!htb]
\libertineLF
 \begin{tabular}{>{\bfseries}ll} \toprule
            123 & 31234 \\ \bottomrule
 \end{tabular}
\end{table}

 \end{document}

Bildbeschreibung hier eingeben

verwandte Informationen