如何制作一个单元格宽度等于页面宽度(不包括边距)的分数的表格?

如何制作一个单元格宽度等于页面宽度(不包括边距)的分数的表格?

这是我尝试过的:

\documentclass[a4paper]{article}

% Margins
\usepackage[margin=1in]{geometry}

% Prevent some weird error
\usepackage[english,ngerman]{babel}

% Prevent paragraph indentation
\usepackage{parskip}
\setlength{\parindent}{0pt}

\usepackage{tabularx} % for the m thing

\begin{document}

\begin{tabular}{ m{0.2\linewidth} m{0.8\linewidth} }
  & \begin{flushright} Right aligned text \end{flushright} \\
\end{tabular}

\begin{flushleft}
Left aligned text
\end{flushleft}

\end{document}

(我希望第二列的文本右对齐)。

所以,这是可行的,但唯一的问题与边距有关。如果你看看左对齐文本的左边距,你会发现它比表格中右对齐文本的边距要大。

我不知道这里的问题是什么。我实际上发现关于该主题的论坛帖子。这似乎正是我想要的。但是,这个\arraycolsep东西在我的环境中根本不起作用,我尝试将其转换为长表,但遇到了错误。

我还能怎样修复此问题?

答案1

单元格文本两侧各有一个tabcolsep等于的小空间,计算列宽时必须对此进行补偿。在您的例子中,您有 2 列,这意味着总共为 s,或者要从计算的长度中减去。6pt4\tabcolsep4*6 = 24pt

此外,您也可以不使用环境\begin{flushright} .. \end{flushright}或,而是使用类型为或\begin{flushleft} .. \end{flushleft}的新列,分别如下所定义。RL

\documentclass[a4paper]{article}

% Margins
\usepackage[margin=1in]{geometry}
\usepackage{showframe}    % <===== just to see the margins, remove after testing      

% Prevent some weird error
\usepackage[english,ngerman]{babel}

% Prevent paragraph indentation
\usepackage{parskip}
\setlength{\parindent}{0pt}

\usepackage{array} % for the 'm' column type

\begin{document}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}

\begin{tabular}{ |L{\dimexpr0.2\linewidth-12pt}| R{\dimexpr0.8\linewidth-12pt}|}
Left aligned text  & Right aligned text \\
\end{tabular}

\begin{flushleft}
Left aligned text
\end{flushleft}

\end{document}

在此处输入图片描述

答案2

实现此目的的最简单方法是使用tabularx,因为此包会考虑到 的值来计算准确的表格宽度\tabcolsep。在这里,X列类型被重新定义为m列,我们可以用 来设置此类列的相对宽度>{\hsize=xx \hsize},不同的xxs 受制于它们的总和等于此类列的数量的条件(因此,这里的值0.4和是1.6为了得到 的比例1:4。可以说,系数与重心坐标成比例)。 \documentclass[a4paper]{article}

% Margins
\usepackage[showframe, margin=1in]{geometry}

% Prevent some weird error
\usepackage[english,ngerman]{babel}

% Prevent paragraph indentation
\usepackage{parskip}

\usepackage{tabularx} % for the m thing

\renewcommand{\tabularxcolumn}[1]{m{#1}}

\begin{document}

\begin{tabularx}{\linewidth}{>{\hsize=0.4\hsize}X >{\hsize=1.6\hsize\raggedleft\arraybackslash}X}
  & Right aligned text \\
Left aligned text. A short left-aligned text. & Some other right-aligned text. A rather long right-aligned text. A rather long right-aligned text.
\end{tabularx}

\end{document} 

在此处输入图片描述

相关内容