使表格的某一列占据所有剩余宽度,而不使其他列换行到下一行

使表格的某一列占据所有剩余宽度,而不使其他列换行到下一行

我想制作一个有 3 列的表格。

表格将适合容器的宽度。

左列将右对齐,并占用尽可能少的宽度空间。

中心列将左对齐,并占用尽可能少的宽度空间。

右列将左对齐并占用尽可能多的宽度空间。

到目前为止我有这个:

% unrelated setup stuff
\documentclass[letter]{report}   
\usepackage[top=2cm, bottom=2cm, left=1cm, right=1cm]{geometry}
\usepackage[sfdefault]{cabin}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage{lipsum}
\newenvironment{absolutelynopagebreak}
    {\par\nobreak\vfil\penalty0\vfilneg
        \vtop\bgroup}
    {\par\xdef\tpd{\the\prevdepth}\egroup
        \prevdepth=\tpd}
\fontfamily{pcr}\selectfont
\setlength{\parindent}{0ex} 
\setlength{\parskip}{1em} 
% /unrelated setup stuff

\begin{document}{
    \begin{tabular}{rll}
        (S) 10 & \% (w/v) & 1,4-butanediol \\
    \end{tabular}
}
\end{document}

但我不确定如何为这三列分配基于百分比的宽度。

理想情况下,它应该是这样的:

\begin{tabular}{r{1 percent}l{1 percent}l{99 percent}}

我想要做的事情可以用 HTML/CSS 显示:

JS 小提琴 -http://jsfiddle.net/3w61tt78/

<table>
    <tr>
        <td class="small r">(S) 10</td>
        <td class="small l">&#37; (w/v)</td>
        <td class="large l">1,4-butanediol</td>
    </tr>
</table>

<style type="text/css">
table, td
{
    border:1px solid #000;
    border-spacing:1px;
}
table
{
    width:100%;
}
td
{
    padding:2px 4px;
}
.small
{
    white-space:nowrap;
    width:1%;
}
.large
{
    width:99%;
}
.r
{
    text-align:right;
}
.l
{
    text-align:left;
}
</style>

答案1

就像这样可能...

\documentclass{article}
\usepackage{array}
\usepackage{tabularx}
\usepackage{showframe}
\begin{document}
  \noindent
  \begin{tabular*}{\textwidth}{rl@{\extracolsep{\fill}}l}    %% @{\extracolsep{\fill}} is redundant IMO
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabular*}

  \bigskip
  \noindent
  \begin{tabular}{>{\raggedleft}p{0.1\textwidth}p{0.15\textwidth}
                                p{\dimexpr0.75\textwidth-6\tabcolsep\relax}}   %% adjust width yourself
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabular}

  \bigskip
  \noindent
  \begin{tabularx}{\textwidth}{rlX}
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabularx}
\end{document}

在此处输入图片描述

答案2

这是一个简化的例子:

\documentclass{article}
\usepackage{array,tabularx}

\begin{document}

  \begin{tabularx}{\linewidth}{>{\hsize=.01\hsize\raggedleft\arraybackslash}X>{\hsize=.01\hsize}X>{\hsize=2.98\hsize}X}
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabularx}

\end{document}

这可以满足您的要求,但是看起来很糟糕:

压扁表格

如果前两列包含的内容相对较少,我只会使用rl

  \begin{tabularx}{\linewidth}{lrX}
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabularx}

自然大小

如果它们包含更长的文本,你可能需要更多类似的内容:

  \begin{tabularx}{\linewidth}{>{\hsize=.5\hsize\raggedleft\arraybackslash}X>{\hsize=.5\hsize}X>{\hsize=2\hsize}X}
    (S) 10 & \% (w/v) & 1,4-butanediol \\
  \end{tabularx}

控制宽度

相关内容