lvjr / tabularray

Typeset tabulars and arrays with LaTeX3
https://ctan.org/pkg/tabularray
247 stars 22 forks source link

Using cmd to set font style on multiple lines cell will generate redundant column space. #308

Closed note286 closed 1 year ago

note286 commented 1 year ago

I found that when there are multiple lines in a certain cell, if the font style is configured with cmd, the column width is abnormal.

Of course, I know that font style should be configured with font, but after I set the font size with cells={font=\scriptsize}, using cmd configuration can avoid configuring the font size again. If you use font to configure, you need to configure the font size again.

I have given examples of various situations, which should be enough to reproduce the phenomenon I described.

My tabularray version is \ProvidesExplPackage{tabularray}{2022-07-01}{2022C}. I am on Windows 10, TeX Live 2022.

QQ截图20220917101557

\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={cmd=\bfseries}}
{consectetur\\dolor}&incididunt&pariatur sint cupidatat\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={cmd=\bfseries}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={cmd=\bfseries}}
{consectetur\\dolor}&incididunt&cupidatat\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={font=\bfseries}}
{consectetur\\dolor}&incididunt&pariatur sint cupidatat\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={font=\bfseries}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,row{1}={font=\bfseries}}
{consectetur\\dolor}&incididunt&cupidatat\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,cells={font=\scriptsize}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,cells={font=\scriptsize},row{1}={font=\bfseries}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,cells={font=\scriptsize},row{1}={font=\bfseries\scriptsize}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,cells={font=\scriptsize},row{1}={cmd=\bfseries}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\begin{tblr}{colspec={Q[c,m]Q[c,m]Q[c,m]},vlines,hlines,cells={font=\scriptsize},row{1}={cmd=\bfseries\scriptsize}}
{consectetur\\dolor}&incididunt&{pariatur\\sint\\cupidatat}\\
\end{tblr}

\end{document}
lvjr commented 1 year ago

First, when cmd=\textbf is applied to a cell with text Beta\\Gamma, it is the same as a cell with text \textbf{Beta\\Gamma}. So it is a little weird to write cmd=\bfseries.

Second, tabularray will fail to split \textbf{Beta\\Gamma} into lines with default measure=hbox setting, so it will get a wrong width. You need to change it to measure=vbox provided by varwidth library.

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{varwidth}
\setlength{\parindent}{0pt}
\begin{document}

\section{no \texttt{cmd} option}

\begin{tblr}{hlines,vlines}
  Alpha & {Beta\\Gamma}
\end{tblr}

\section{\texttt{cmd} option and \texttt{measure=hbox}}

\begin{tblr}{hlines,vlines,cells={cmd=\textbf}}
  Alpha & {Beta\\Gamma}
\end{tblr}

\begin{tblr}{hlines,vlines}
  \textbf{Alpha} & \textbf{Beta\\Gamma}
\end{tblr}

\fbox{\textbf{Beta\\Gamma}}

\section{\texttt{cmd} option and \texttt{measure=vbox}}

\begin{tblr}{hlines,vlines,cells={cmd=\textbf},measure=vbox}
  Alpha & {Beta\\Gamma}
\end{tblr}

\begin{tblr}{hlines,vlines,measure=vbox}
  \textbf{Alpha} & \textbf{Beta\\Gamma}
\end{tblr}

\end{document}

image

note286 commented 1 year ago

Thank you very much for your answer. Thank you for your package, too. It's really easy to use!