![如何制作一个单元格宽度等于页面宽度(不包括边距)的分数的表格?](https://linux22.com/image/355320/%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E5%8D%95%E5%85%83%E6%A0%BC%E5%AE%BD%E5%BA%A6%E7%AD%89%E4%BA%8E%E9%A1%B5%E9%9D%A2%E5%AE%BD%E5%BA%A6%EF%BC%88%E4%B8%8D%E5%8C%85%E6%8B%AC%E8%BE%B9%E8%B7%9D%EF%BC%89%E7%9A%84%E5%88%86%E6%95%B0%E7%9A%84%E8%A1%A8%E6%A0%BC%EF%BC%9F.png)
这是我尝试过的:
\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,或者要从计算的长度中减去。6pt
4\tabcolsep
4*6 = 24pt
此外,您也可以不使用环境\begin{flushright} .. \end{flushright}
或,而是使用类型为或\begin{flushleft} .. \end{flushleft}
的新列,分别如下所定义。R
L
\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}
,不同的xx
s 受制于它们的总和等于此类列的数量的条件(因此,这里的值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}