Atributo \addfontfeatures perdido após o próximo comando fontspec (como \textbf{})

Atributo \addfontfeatures perdido após o próximo comando fontspec (como \textbf{})
  1. Estou usando a fonte Linux Libertine (do sistema) comXeTeX.
  2. No corpo, estou usando OldStylenumerais enquanto quero Liningnumerais nas tabelas.
  3. Estou compondo tabelas que possuem algumas células com \bfseriestexto.

No entanto, a \addfontfeatureconfiguração só é aplicada ao texto normal, mas não ao texto definido no formato \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}

Isso produz:

numerais em <code>\bfseries</code> ainda são <code>OldStyle</code>

Como posso definir \addfontfeatures{Numbers={Lining}}a aplicação a todo o texto de um grupo?

Responder1

O problema é reproduzível sem tabela:

\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}

insira a descrição da imagem aqui

Como você pode ver, a chamada para \normalfontredefine os recursos de volta ao que foi declarado no início. O \bfseriescomando faz \fontseries{\bfdefault}\selectfonto que anula o recurso escolhido.

Meu conselho é evitar \addfontfeaturessempre que possível, mesmo ao custo de alguma duplicação de código.

\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}

insira a descrição da imagem aqui

Responder2

Usar

 \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}

insira a descrição da imagem aqui

informação relacionada