如何使用表达式(如 \textwidth - \widthof{dummy text})计算宽度?

如何使用表达式(如 \textwidth - \widthof{dummy text})计算宽度?

以表格为例,其中一列包含任意长度的短文本,另一列包含大量描述。

为了节省读者的时间:

\documentclass{article}

\usepackage{lipsum}

\begin{document}
\begin{tabular}{lp{.7\textwidth}} % What should go into `p` ...?
    ABC & \lipsum[1] \\
\end{tabular}
\end{document}

应该输入什么p才能使列完美地覆盖其余的文本区域(不在 下的区域l)?我想做类似的事情\textwidth - \widthof{ABC} - 6pt,这样它就很灵活,我可以根据需要更改它。我想到了这个calc包,但不知道如何使用它。

答案1

\documentclass{article}
\usepackage[showframe]{geometry}\parindent0pt\parskip1em
\usepackage{tabulary} % or tabularx
\usepackage{calc}
\usepackage{lipsum}
\begin{document}

What you ask: 

\newlength\aaa
\settowidth\aaa{ABC}
\begin{tabular}{lp{\dimexpr\linewidth-4\tabcolsep-\aaa}} 
    ABC & \lipsum[1] \\
\end{tabular}

What you want:

\begin{tabulary}{\linewidth}{lJ} % or tabularx using a X  column
ABC & \lipsum[1] \\
\end{tabulary}
\end{document}

在这种情况下tabularx,和之间的区别在于,它将始终占用 的宽度,而仅在需要时才达到边距(您会注意到在 位置使用“hello”的区别)。tabularytabularx\linewidthtabulary\lipsum[1]

答案2

您的任务需要分\halign两次处理内部数据。在第一次处理中,测量表格(因为l在此之前列的宽度未知)。第二次处理使用第一次处理的结果。在 LaTeX 中,此操作的实现包含在 tabularx 或 tabulary 包中,如另一个答案中所述。在 OpTeX 中,您可以编写\table pxto<width>并使用虚拟 dimen-unit\tsize,请参阅表格到指定宽度在 OpTeX 手册中它的实施

相关内容