Dopasuj kilka tabel tabularx
próbuję zbudować moje CV tutaj z Latex. Znalazłem szablon,https://github.com/btskinner/tex_cv/blob/master/cv.tex. Nie rozumiem, dlaczego w poniższym przykładzie dwie tabele nie są wyrównane, chociaż o ile widzę kod powinien je wyrównać? Tak to się kompiluje dla mnie:
Jak uzyskać wyrównanie 2020 i XXXX oraz testu „Coś, gdzieś” i? Dzięki!
\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}
Odpowiedzi
Użyłbym makr i nie 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}
Możesz sparametryzować szerokość pierwszej i ostatniej kolumny, na wypadek gdyby dane dla konkretnego CV nie pasowały.
W ten sposób nie ryzykujesz, że tabularzostanie oderwany od tytułu.
Bardziej dopracowana wersja, w której szerokości kolumn (pierwsza i trzecia) są sparametryzowane, dzięki czemu można zmienić ich rozmiar w odpowiednim miejscu w preambule. Również \twocolsectioni \threecolsectionmieć opcjonalny argument, którym powinien być L(domyślnie) lub J, do określenia wyrównania do lewej (nierówny do prawej) lub justowania w głównej kolumnie.
\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}
Inna wersja, w której możesz oddzielić elementy na każdej liście pewną pionową spacją. Potrzebne są metody wyższego poziomu, aby zapewnić, że przestrzeń jest dodawana tylko między elementami, przy użyciu \addlinespacezapewnianych przez 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}
Eksperymentuj z różnymi wartościami \defaultaddspace.
Jeśli chodzi również o podsekcje, proponuję nieco inną składnię, która pozwala uniknąć powielania kodu.
\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}