对齐多个 tabularx 表

对齐多个 tabularx 表

尝试使用 Latex 构建我的简历。我找到了一个模板,https://github.com/btskinner/tex_cv/blob/master/cv.tex。我不明白的是,为什么在下面的例子中,这两个表没有对齐,尽管据我所知,代码应该对齐它们?这就是它对我的编译方式:

在此处输入图片描述

如何使 2020 和 XXXX 以及“某事、某处”和测试对齐?谢谢!

\documentclass[11pt]{article}
\newcommand{\recentyear}{1900}  % artificially low year to include everything

% ------------------------------------------------------------------------------
% HEADER STUFF (CAN LEAVE ALONE UNLESS YOU WANT TO PERSONALIZE)
% ------------------------------------------------------------------------------

% -------------------------------
% Packages
% -------------------------------

\usepackage[margin=1in]{geometry} % for margins
\usepackage[american]{babel}      % for language

      % for reference sections


\usepackage{titlesec}             % to adjust section headers
\usepackage{tabularx}             % for fluid tables

% -------------------------------
% Macros


\newcommand{\RR}{\raggedright\arraybackslash} % left justified
\newcommand{\RL}{\raggedleft\arraybackslash}  % right justified

% for tables to keep consistent alignment across sections
\newcolumntype{\twocols}{>{\RR}p{1.25in}>{\RR}X}
\newcolumntype{\threecols}{>{\RR}p{1.25in}>{\RR}X>{\RL}p{1in}}

\begin{document}

\section*{Education}
\begin{center}
    \vspace{-1.5em}
    \rule{\textwidth}{0.5pt}  
\end{center}

\begin{tabularx}{\linewidth}{\threecols}
 2020 (expected) &Something, somewhere & Ph.D. \\ % or YYYY (expected)
 
\end{tabularx}


\section*{Grants and Scholarships}
\begin{center}
    \vspace{-1.5em}
    \rule{\textwidth}{0.5pt}  
\end{center}
\begin{tabularx}{\linewidth}{\threecols}
    YYYY & test & bb \\
    YYYY - YYYY & Fellowship & \$ AMOUNT \\ % if normal in your field
    
\end{tabularx}  
\end{document}

答案1

我会使用宏而不是tabularx

\documentclass[11pt]{article}
\usepackage{array}
% -------------------------------
% Packages
% -------------------------------

\usepackage[margin=1in]{geometry} % for margins
\usepackage[american]{babel}      % for language

      % for reference sections


\usepackage{titlesec}             % to adjust section headers
\usepackage{tabularx}             % for fluid tables

\newcommand{\recentyear}{1900}  % artificially low year to include everything

\titleformat{\section}
 {\bfseries\Large}
 {}% no number
 {0pt}% no space
 {}% the title
 [\titlerule]

% ------------------------------------------------------------------------------
% HEADER STUFF (CAN LEAVE ALONE UNLESS YOU WANT TO PERSONALIZE)
% ------------------------------------------------------------------------------


% -------------------------------
% Macros

\newcommand{\twocolsection}[2]{%
  \section{#1}
  \begin{tabular}[t]{
    @{}
    wl{1.25in}
    >{\raggedright\arraybackslash}p{\dimexpr\textwidth-1.25in-2\tabcolsep}
    @{}
  }
  #2
  \end{tabular}\par
}
\newcommand{\threecolsection}[2]{%
  \section{#1}
  \begin{tabular}[t]{
    @{}
    wl{1.25in}
    >{\raggedright\arraybackslash}p{\dimexpr\textwidth-2.25in-4\tabcolsep}
    wr{1in}
    @{}
  }
  #2
  \end{tabular}\par
}

\begin{document}

\threecolsection{Education}{
 2020 (expected) &Something, somewhere & Ph.D. \\ % or YYYY (expected)
}

\threecolsection{Grants and Scholarships}{
    YYYY & test & bb \\
    YYYY - YYYY & Fellowship & \$ AMOUNT \\ % if normal in your field
}

\end{document}

在此处输入图片描述

您可以参数化第一列和最后一列的宽度,以防特定 CV 的数据不适合。

这样,您就不会冒着tabular与标题分离的风险。


更完善的版本,其中列宽(第一列和第三列)是参数化的,因此您可以在序言中的适当位置更改它们的大小。此外,\twocolsection\threecolsection有一个可选参数,应该是L(默认)或J,用于指定主列中的左对齐(右对齐)或对齐。

\documentclass[11pt]{article}

\usepackage[margin=1in]{geometry} % for margins
\usepackage[american]{babel}      % for language
\usepackage{titlesec}             % to adjust section headers
\usepackage{array}

% customization of sections

\titleformat{\section}
 {\bfseries\Large}
 {}% no number
 {0pt}% no space
 {}% the title
 [\titlerule]

% main macros

\newlength{\firstcol}
\newlength{\thirdcol}

% helper column types
\newcolumntype{L}[2]{%
  >{\raggedright\arraybackslash}p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}
\newcolumntype{J}[2]{%
  p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}

\newcommand{\twocolsection}[3][L]{%
  \section{#2}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #1{\firstcol}{2}
    @{}
  }
  #3
  \end{tabular}\par
}
\newcommand{\threecolsection}[3][L]{%
  \section{#2}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #1{\firstcol+\thirdcol}{4}
    wr{\thirdcol}
    @{}
  }
  #3
  \end{tabular}\par
}

%%% final customization
\setlength{\firstcol}{1.25in}
\setlength{\thirdcol}{1in}
%%%

\begin{document}

\threecolsection{Education}{
  2020 (expected) &Something, somewhere & Ph.D. \\ % or YYYY (expected)
}

\threecolsection{Grants and Scholarships}{
  YYYY & test & bb \\
  YYYY - YYYY & Fellowship & \$ AMOUNT \\ % if normal in your field
}

\twocolsection{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\twocolsection[J]{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\end{document}

在此处输入图片描述


\addlinespace另一个版本中,您可以通过一些垂直空间将每个列表中的项目分开。需要使用提供的更高级方法来确保仅在项目之间添加空间booktabs

\documentclass[11pt]{article}

\usepackage[margin=1in]{geometry} % for margins
\usepackage[american]{babel}      % for language
\usepackage{titlesec}             % to adjust section headers
\usepackage{array}
\usepackage{booktabs}

% customization of sections

\titleformat{\section}
 {\bfseries\Large}
 {}% no number
 {0pt}% no space
 {}% the title
 [\titlerule]

% main macros

\newlength{\firstcol}
\newlength{\thirdcol}

% helper column types
\newcolumntype{L}[2]{%
  >{\raggedright\arraybackslash}p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}
\newcolumntype{J}[2]{%
  p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}

\ExplSyntaxOn

\NewDocumentCommand{\twocolsection}{ O{L} m +m }
 {
  \section{#2}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #1{\firstcol}{2}
    @{}
  }
  \scw_cv_table:n { #3 }
  \end{tabular}\par
 }
\NewDocumentCommand{\threecolsection}{ O{L} m +m }
 {
  \section{#2}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #1{\firstcol+\thirdcol}{4}
    wr{\thirdcol}
    @{}
  }
  \scw_cv_table:n { #3 }
  \end{tabular}\par
 }

\seq_new:N \l__scw_cv_rows_seq
\tl_new:N \l__scw_cv_last_tl

\cs_new_protected:Nn \scw_cv_table:n
 {
  % get the rows
  \seq_set_split:Nnn \l__scw_cv_rows_seq { \\ } { #1 }
  % remove the last item if empty
  \seq_pop_right:NN \l__scw_cv_rows_seq \l__scw_cv_last_tl
  \tl_if_blank:VF \l__scw_cv_last_tl
   {% not blank, reinsert it
    \seq_put_right:NV \l__scw_cv_rows_seq \l__scw_cv_last_tl
   }
  % deliver the rows separated by \\ \addlinespace
  \seq_use:Nn \l__scw_cv_rows_seq { \\ \addlinespace }
 }

\ExplSyntaxOff

%%% final customization
\setlength{\firstcol}{1.25in}
\setlength{\thirdcol}{1in}
%\setlength{\defaultaddspace}{0.5em} % this is the default in booktabs
%%%

\begin{document}

\threecolsection{Education}{
  2020 (expected) &Something, somewhere & Ph.D. \\ % or YYYY (expected)
}

\threecolsection{Grants and Scholarships}{
  YYYY & test & bb \\
  YYYY - YYYY & Fellowship & \$ AMOUNT \\ % if normal in your field
}

\twocolsection{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\twocolsection[J]{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\end{document}

尝试不同的值\defaultaddspace

在此处输入图片描述

为了处理小节,我建议采用略有不同的语法,以避免一些代码重复。

\documentclass[11pt]{article}

\usepackage[margin=1in]{geometry} % for margins
\usepackage[american]{babel}      % for language
\usepackage{titlesec}             % to adjust section headers
\usepackage{array}
\usepackage{booktabs}

% customization of sections

\titleformat{\section}
 {\bfseries\Large}
 {}% no number
 {0pt}% no space
 {}% the title
 [\titlerule]
\titlespacing*{\section}{0pt}{*2}{*1}

\titleformat{\subsection}
 {\bfseries\normalsize}
 {}% no number
 {0pt}% no space
 {}% the title
 [\titlerule]
\titlespacing*{\subsection}{0pt}{*1}{*0.5}

% main macros

\newlength{\firstcol}
\newlength{\thirdcol}

% helper column types
\newcolumntype{L}[2]{%
  >{\raggedright\arraybackslash}p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}
\newcolumntype{J}[2]{%
  p{\dimexpr\textwidth-(#1)-#2\tabcolsep\relax}%
}

\ExplSyntaxOn

\NewDocumentCommand{\twocol}{ m O{L} m +m }
 {
  #1{#3}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #2{\firstcol}{2}
    @{}
  }
  \scw_cv_table:n { #4 }
  \end{tabular}\par
 }
\NewDocumentCommand{\threecol}{ m O{L} m +m }
 {
  #1{#3}
  \begin{tabular}[t]{
    @{}
    wl{\firstcol}
    #2{\firstcol+\thirdcol}{4}
    wr{\thirdcol}
    @{}
  }
  \scw_cv_table:n { #4 }
  \end{tabular}\par
 }

\seq_new:N \l__scw_cv_rows_seq
\tl_new:N \l__scw_cv_last_tl

\cs_new_protected:Nn \scw_cv_table:n
 {
  % get the rows
  \seq_set_split:Nnn \l__scw_cv_rows_seq { \\ } { #1 }
  % remove the last item if empty
  \seq_pop_right:NN \l__scw_cv_rows_seq \l__scw_cv_last_tl
  \tl_if_blank:VF \l__scw_cv_last_tl
   {% not blank, reinsert it
    \seq_put_right:NV \l__scw_cv_rows_seq \l__scw_cv_last_tl
   }
  % deliver the rows separated by \\ \addlinespace
  \seq_use:Nn \l__scw_cv_rows_seq { \\ \addlinespace }
 }

\ExplSyntaxOff

%%% final customization
\setlength{\firstcol}{1.25in}
\setlength{\thirdcol}{1in}
%\setlength{\defaultaddspace}{0.5em} % this is the default in booktabs
%%%

\begin{document}

\threecol\section{Education}{
  2020 (expected) &Something, somewhere & Ph.D. \\ % or YYYY (expected)
}

\threecol\section{Grants and Scholarships}{
  YYYY & test & bb \\
  YYYY - YYYY & Fellowship & \$ AMOUNT \\ % if normal in your field
}

\twocol\subsection{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\twocol\subsection[J]{Whatever}{
  YYYY & something long to need being split across lines; let's just
         write long enough nonsense and see
}

\end{document}

在此处输入图片描述

相关内容