Aligner plusieurs tableaux tabularx
essayer de construire mon CV ici avec Latex. J'ai trouvé un modèle,https://github.com/btskinner/tex_cv/blob/master/cv.tex. Ce que je ne comprends pas, c'est pourquoi dans l'exemple ci-dessous, les deux tableaux ne sont pas alignés, bien que pour autant que je sache, le code devrait les aligner? Voilà comment ça compile pour moi:
Comment puis-je aligner le 2020 & XXXX ainsi que le test "Quelque chose, quelque part"? Merci!
\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}
Réponses
J'utiliserais des macros et non 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}
Vous pouvez paramétrer la largeur de la première et de la dernière colonne, au cas où les données du CV spécifique ne correspondent pas.
De cette façon, vous ne risquez pas que le tabularsoit détaché du titre.
Une version plus raffinée où les largeurs de colonne (première et troisième) sont paramétrées, afin que vous puissiez changer leur taille à l'endroit approprié dans le préambule. Aussi \twocolsectionet \threecolsectionavoir un argument facultatif qui devrait être L(par défaut) ou J, pour spécifier l'alignement à gauche (irrégulier à droite) ou la justification dans la colonne principale.
\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}
Une autre version où vous pouvez séparer les éléments de chaque liste par un espace vertical. Il faut des méthodes de niveau supérieur pour s'assurer que l'espace est ajouté uniquement entre les éléments, en utilisant \addlinespacefourni par 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}
Expérimentez avec différentes valeurs de \defaultaddspace.
Pour traiter également des sous-sections, je suggère une syntaxe légèrement différente qui évite une certaine duplication de code.
\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}