当使用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}
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}