在多个部分内对齐一般表格列的宽度

在多个部分内对齐一般表格列的宽度

我在页面格式方面遇到了一些问题tabular。我尝试编写包含多个内容sections(个人数据、教育背景等)的简历,每个简历中都有tabular两列:第一列用于日期和/或一般标题,第二列用于联系人描述。

前任:

\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{hyperref}
\usepackage{subscript}
\usepackage[absolute]{textpos}
\usepackage{xunicode,xltxtra,url,parskip}
\RequirePackage{color,graphicx}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage[big]{layaureo}              
\usepackage{titlesec}                   

\titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]
\titlespacing{\section}{0pt}{1pt}{1pt}

\begin{document}
\section{Work Experience}
\begin{tabular}{r|p{0.8\textwidth}}
\underline{\emph{2018}} & Ph.D Student at the \textbf{University of Blabla}, Blabla, Earth \\\textsc{Sept 2013} & \emph{Prof. Einstein Lab - Dept. of Physics}\\ & \footnotesize{\textsf{The group of Prof. Einstein focuses on bla bla}.}} \\
\end{tabular}

\section{Skills}
\begin{tabular}{r|p{0.8\textwidth}}
\textsc{Computer Skills} & Data analysis softwares \textit{(Blablabla, Blablabla -- Blablabla, Matlab)} -- Extras \textit{(\textsc{GNU/Linux}, Blabla, blabla)}.\\\multicolumn{2}{c}{} \\
\end{tabular}

\end{document}
  • 列之间的分隔符|根据第一列中单词的宽度放置在不同的位置。
    • 例如:显然单词 asComputer Skills2016
  • 第二列的长度取决于剩余空间
    • 如果第一列的宽度不同,则第二列上的文本将不会与其他列对齐

在此处输入图片描述

也许根本不可能,但由于我的长度不同,我想以“自动”的方式统一我的列的尺寸(也就是说,不需要像2,5cmtabular环境设置中添加个人固定参数)。

我已经尝试使用tabular*tabularx以及multirow环境,但没有成功。由于缺乏经验,我肯定错过了一些东西。

所以我总结的问题是:

我怎样才能概括列的宽度,以便使最终尺寸在不同部分保持一致?

答案1

当@Andrew Swann 发表类似想法时,我正在对一个变体进行微调。

注意我删除了xelatex特定的软件包,因为你加载了inputencfontenc和。此外,的babel选项毫无用处,因为它已经是默认选项好几年了。usenamesxcolor

我建议使用tabularxeqparboxcollcell定义一种新的R列类型,将每个单元格的内容放在中eqmakebox。此外,我建议定义一个新的彩色、更粗的垂直规则,插入列之间,如下所示v

\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{hyperref}
\usepackage[absolute]{textpos}
\usepackage{url,parskip}
\usepackage{graphicx}
\usepackage[dvipsnames]{xcolor}
\usepackage[big]{layaureo}
\usepackage{titlesec}

\usepackage{tabularx, eqparbox, collcell}
\newcommand\myeqmakebox[1]{\eqmakebox[COL][r]{\scshape#1}}
\newcolumntype{R}{>{\collectcell\myeqmakebox}r<{\endcollectcell}}
\newcolumntype{v}{!{\color{CornflowerBlue}\vrule width 3pt}}%

\titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]
\titlespacing{\section}{0pt}{1pt}{1pt}
\setlength\extrarowheight{3pt}

\begin{document}

\section{Work Experience}

\begin{tabularx}{\linewidth}{@{}R v X@{}}
\underline{\emph{2018}} & Ph.D Student at the \textbf{University of Blabla}, Blabla, Earth \\%
Sept 2013 & \emph{Prof. Einstein Lab - Dept. of Physics}\newline \footnotesize{\textsf{The group of Prof. Einstein focuses on bla bla}.}
\end{tabularx}

\section{Skills}

\begin{tabularx}{\linewidth}{@{}RvX@{}}
Computer Skills & Data analysis softwares \textit{(Blablabla, Blablabla -- Blablabla, Matlab)} -- Extras \textit{(\textsc{GNU/Linux}, Blabla, blabla)}.
\end{tabularx}

\end{document} 

在此处输入图片描述

答案2

您可以eqparbox为此使用该包。

首先加载array然后定义一个新的列类型L

\newcolumntype{L}[1]{>{\begin{lrbox{\csname#1box\endcsname}}r%
  <{\end{lrbox}\eqmakebox[#1][r]%
  {\unhcopy\csname#1box\endcsname\strut}}}

然后,规范L{colname}将生成列,这些列将其内容捕获到名为 的框中colnamebox,并将它们放置在\eqmakebox名为 的 中colname。 的属性\eqmakebox是,相同序列中的所有此类框将具有相同的宽度,可能在第二次运行 LaTeX 之后。您需要用colnamebox声明\newsavebox

示例输出

\documentclass[a4paper,12pt]{article}

\usepackage{parskip}
\usepackage[big]{layaureo}
\usepackage{titlesec}

\usepackage{eqparbox,array}

\newcolumntype{L}[1]{>{\begin{lrbox}{\csname#1box\endcsname}}r%
  <{\end{lrbox}\eqmakebox[#1][r]{\unhcopy\csname#1box\endcsname\strut}}}
\newsavebox{\mylheadbox}
\newlength{\mylheadwd}
\makeatletter
\AtBeginDocument{\setlength{\mylheadwd}{%
  \@ifundefined{eqp@this@mylhead}{0pt}{\eqp@this@mylhead}}}
\makeatother

\titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]
\titlespacing{\section}{0pt}{1pt}{1pt}

\begin{document}

\section{Work Experience}
\begin{tabular}{L{mylhead}|p{0.9\textwidth-\mylheadwd}}
  \underline{\emph{2018}}
  &Ph.D Student at the \textbf{University of Blabla}, Blabla, Earth \\
  \textsc{Sept 2013}
  &\emph{Prof.\ Einstein Lab - Dept.\ of Physics}\\
  &\footnotesize\textsf{The group of Prof.\ Einstein focuses on bla bla}. \\
\end{tabular}

\section{Skills}
\begin{tabular}{L{mylhead}|p{0.9\textwidth-\mylheadwd}}
  \textsc{Computer Skills}
  &Data analysis softwares (\textit{Blablabla, Blablabla ---
    Blablabla, Matlab}) --- Extras (\textit{\textsc{GNU/Linux}, Blabla,
    blabla}).\\
\end{tabular}

\end{document}

在上面的代码中,我删除了此特定示例中所有未使用的包,并整理了表中的文本命令。请注意 (a) 如果您正在使用,hyperref则它应该是最后加载的包,(b)\footnotesize不带参数,(c) 缩写需要写成Prof.\,(d) 圆括号最好放在斜体之外。

\eqmakebox[mlhead]上述代码还展示了一种通过将给定 es 存储在 中来捕获给定 es 的大小的方法\mylheadwd。第一次编译文档时,捕获此变量时的变量,即\eqp@this@mylhead,未定义,因此我为此添加了一个测试。正确的值仅在文档主体的开头可用,因此代码已封装在 中\AtBeginDocument。我已使用此机制来确定表格中第二列的宽度。Bernard 建议使用tabularx是一种更实用的方法,但仅限于在表格中使用。

答案3

我必须删除一些软件包才能让它在我的电脑上加载和运行。顺便说一句,加载 color 和 xcolor 是多余的。

只要您使用固定长度 p{} 并右对齐表格,并且没有任何东西插入边距,列就会对齐。您真正需要做的就是计算 parboxes 的最大宽度。

由于通常只需看一眼就能知道最长的条目,因此我首先测量了它的宽度(计算机技能)。然后我计算了在\textwidth删除表格开销后剩余的空间。(如果您想缩进表格,也请减去\parindent)。

\documentclass[a4paper,12pt]{article}
%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{hyperref}
%\usepackage{subscript}
\usepackage[absolute]{textpos}
%\usepackage{xunicode,xltxtra,url,parskip}
%\RequirePackage{color,graphicx}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage[big]{layaureo}              
\usepackage{titlesec}        
\usepackage{showframe}% debugging tool

\titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]
\titlespacing{\section}{0pt}{1pt}{1pt}

\newlength{\maxwidth}

\begin{document}
\settowidth{\maxwidth}{\textsc{Computer Skills}}%
\setlength{\maxwidth}{\dimexpr \textwidth-\maxwidth-4\tabcolsep-\arrayrulewidth}%
\section{Work Experience}
\noindent\raggedleft
\begin{tabular}{r|p{\maxwidth}}
\underline{\emph{2018}} & Ph.D Student at the \textbf{University of Blabla}, Blabla, Earth \\\textsc{Sept 2013} & \emph{Prof. Einstein Lab - Dept. of Physics}\\ & \footnotesize{\textsf{The group of Prof. Einstein focuses on bla bla}.} \\
\end{tabular}

\section{Skills}
\noindent\raggedleft
\begin{tabular}{r|p{\maxwidth}}
\textsc{Computer Skills} & Data analysis softwares \textit{(Blablabla, Blablabla -- Blablabla, Matlab)} -- Extras \textit{(\textsc{GNU/Linux}, Blabla, blabla)}.\\ \multicolumn{2}{c}{} \\
\end{tabular}

\end{document}

演示

相关内容