Alinear varias tablas tabularx
tratando de construir mi CV aquí con Latex. He encontrado una plantilla,https://github.com/btskinner/tex_cv/blob/master/cv.tex. Lo que no entiendo es por qué en el siguiente ejemplo, las dos tablas no están alineadas, aunque hasta donde puedo ver, el código debería alinearlas. Así es como se compila para mí:
¿Cómo puedo alinear el 2020 y el XXXX, así como el "Algo, en algún lugar" y la prueba? ¡Gracias!
\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}
Respuestas
Usaría macros y no 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}
Puede parametrizar el ancho de la primera y la última columna, en caso de que los datos del CV específico no encajen.
De esta manera, no corre el riesgo de que tabularse separe del título.
Una versión más pulida donde los anchos de columna (primero y tercero) están parametrizados, por lo que puede cambiar su tamaño en el lugar apropiado del preámbulo. Además \twocolsectiony \threecolsectiontener un argumento opcional que debería ser L(predeterminado) o J, para especificar la alineación a la izquierda (irregular a la derecha) o la justificación en la columna principal.
\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}
Otra versión en la que puedes separar los elementos de cada lista por algún espacio vertical. Se necesitan métodos de nivel superior para garantizar que el espacio se agregue solo entre elementos, utilizando \addlinespaceproporcionados por 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}
Experimente con diferentes valores de \defaultaddspace.
Para tratar también con subsecciones, sugiero una sintaxis ligeramente diferente que evita cierta duplicación de código.
\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}