带有 \textwidth 的表格比 \tcblisting minipage 更宽

带有 \textwidth 的表格比 \tcblisting minipage 更宽

当使用tabular带有文本宽度(手动计算)时,它比通过以下方式创建的迷你页面更宽\tcblisting

\documentclass{article}

\newlength\mylenA
\newlength\invoicedescwidth

\usepackage{tcolorbox}
\tcbuselibrary{listings}

\usepackage{tabularx}
\begin{document}

    \begin{tcblisting}{title=tabular with manual column widths}
\settowidth\mylenA{%   
    \textsf{\textbf{Pos.Total sum}}}
\setlength\invoicedescwidth{%
    \dimexpr\textwidth-\mylenA\relax}       
\begin{tabular}
    {
    r
    p{\invoicedescwidth}
    r
    }%
    \textbf{Pos.} & \textbf{Other text} & \textbf{Total sum} \\
    \hline\\
\end{tabular}
    \end{tcblisting}


    \begin{tcblisting}{title=tabularx with textwidth}
\begin{tabularx}{\textwidth}
    {
    r
    X
    r
    }%
    \textbf{Pos.} & \textbf{Other text} & \textbf{Total sum} \\
    \hline\\
\end{tabularx}
    \end{tcblisting}
    
\end{document}

tcblisting 表格

Tabularx 可以工作。两者不应该一样吗?我不想使用 tabularx,因为 LaTeX 构建期间的多次调用会破坏在 tabularx 中完成的计算...

答案1

您忘记减去\tabcolsep空格,而空格有六个。另外,由于您使用衬线字体排版表格,因此使用\textsf将选择错误的宽度。

我会\linewidth在两种情况下使用,但似乎\textwidth在中正确更新tcolorbox,因此如果您在单列中排版,则没有什么问题。

\documentclass{article}

\newlength\mylenA
\newlength\invoicedescwidth

\usepackage{tcolorbox}
\tcbuselibrary{listings}

\usepackage{tabularx}
\begin{document}

\begin{tcblisting}{title=tabular with manual column widths}
  \settowidth\mylenA{\textbf{Pos.Total sum}}
  \setlength\invoicedescwidth{%
    \dimexpr\linewidth-\mylenA-6\tabcolsep\relax
  }
  \begin{tabular}{
    r
    p{\invoicedescwidth}
    r
  }
  \textbf{Pos.} & \textbf{Other text} & \textbf{Total sum} \\
  \hline
  \end{tabular}
\end{tcblisting}


\begin{tcblisting}{title=tabularx with textwidth}
  \begin{tabularx}{\textwidth}{
    r
    X
    r
  }
  \textbf{Pos.} & \textbf{Other text} & \textbf{Total sum} \\
  \hline
  \end{tabularx}
\end{tcblisting}
    
\end{document}

在此处输入图片描述

相关内容