我正在尝试创建一个新表格,其中第一列的文本恰好从左边距开始,最后一列的文本恰好从右边距结束。
此外,我还希望前两列非常靠近,后两列也靠近,并且中间留出最大的空间。
这是我目前得到的,非常接近,但第一列并不完全在第一个边距,最后一列也不完全在右边距:
\documentclass[letterpaper,9pt]{article}
\usepackage[margin=1in,letterpaper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{lipsum}
\begin{document}
\begin{center}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}%
\newcolumntype{L}{>{\raggedright\arraybackslash}X}%
\begin{tabularx}{\textwidth}{ r l R L }
\textbf{High Level Languages} & Python, Mathematica &
\textbf{Statistical Languages} & Stan \\
\textbf{Low Level Languages} & C, C\texttt{++}, CUDA &
\textbf{Shells} & Zsh, Bash \\
\end{tabularx}
\end{center}
\noindent
\lipsum[1]
\end{document}
以下是我希望它看起来的样子(在照片编辑软件上手动完成,用红线强调所需的位置):
我还想不惜一切代价避免换行,这似乎是即使列之间仍有足够的空间也会发生的事情,并且作为奖励点,可能在底部添加一个跨越所有列的长行,虽然我认为这相当简单并且是一个创建多行环境的问题,但我将它保存以备后用,希望能够先解决这个问题。
答案1
\documentclass[letterpaper,9pt]{article}
\usepackage[margin=1in,letterpaper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\begin{document}
\setlength\tabcolsep{2pt} % half the space between column 1 and 2 and
% between 3 and 4
\noindent
\begin{tabular*}{\textwidth}{@{} r l @{\extracolsep{\fill}} r@{\extracolsep{2\tabcolsep}} l@{} }
\textbf{High Level Languages} & Python, Mathematica &
\textbf{Statistical Languages} & Stan \\
\textbf{Low Level Languages} & C, C\texttt{++}, CUDA &
\textbf{Shells} & Zsh, Bash \\
\end{tabular*}
\lipsum[1]
\end{document}
答案2
像这样:
(红线表示页面布局)
\documentclass[letterpaper,9pt]{article}
\usepackage[margin=1in,letterpaper]{geometry}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{tabularx}
\usepackage{lipsum}
\begin{document}
\begin{center}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}%
\setlength\tabcolsep{3pt} % if you like to reduce spaces between columns
% default size is 6pt
\begin{tabularx}{\textwidth}{@{} >{\bfseries}r L >{\bfseries}r l @{}}
% @{} remove \tabcolsep at start and end of table
High Level Languages
& Python, Mathematica & Statistical Languages
& Stan \\
Low Level Languages
& C, C\texttt{++}, CUDA & Shells & Zsh, Bash \\
\end{tabularx}
\end{center}
\noindent
\lipsum[1]
\end{document}
要求“不惜一切代价”避免文本换行意味着,在某些情况下,当单元格中的文本过长时,它将延伸表格宽度,因此不会在文本右边框处结束。这可以接受吗?
答案3
为什么不是两个表格?
\documentclass{article}
\usepackage[margin=1in,letterpaper]{geometry}
\usepackage{tabularx}
\usepackage{lipsum}
\begin{document}
\noindent
\begin{tabular}[t]{@{}ll@{}}
\textbf{High Level Languages} & Python, Mathematica \\
\textbf{Low Level Languages} & C, C\texttt{++}, CUDA
\end{tabular}\hfill
\begin{tabular}[t]{@{}ll@{}}
\textbf{Statistical Languages} & Stan \\
\textbf{Shells} & Zsh, Bash
\end{tabular}
\noindent
\lipsum[1][1-3]
\end{document}
如果你替换为
\begin{tabular}[t]{@{}r@{\enspace}l@{}}
在两个表格中,你得到
这不是我想要的东西;不过,这只是个人品味。
这两个表格可能很难输入,所以这里有一个接受更简单的用户级语法的版本。
\documentclass{article}
\usepackage[margin=1in,letterpaper]{geometry}
\usepackage{tabularx}
\usepackage{lipsum}
\ExplSyntaxOn
\NewDocumentCommand{\skills}{m}
{
\ferreira_cv_skills:n { #1 }
}
\seq_new:N \l__ferreira_cv_skills_seq
\tl_new:N \l__ferreira_cv_skills_body_tl
\cs_new_protected:Nn \ferreira_cv_skills:n
{
\group_begin:
\par\addvspace{\medskipamount}
\seq_clear:N \l__ferreira_cv_skills_seq
% store the skills
\cs_set_eq:NN \skill \__ferreira_cv_skills_add:nn
#1
% process the skills
\cs_set_eq:NN \skill \__ferreira_cv_skill_print:nn
\noindent
% first the odd skills
\tl_clear:N \l__ferreira_cv_skills_body_tl
\seq_indexed_map_function:NN \l__ferreira_cv_skills_seq \__ferreira_cv_skill_make_odd:nn
\begin{tabular}[t]{@{}r@{\enspace}l@{}}
\tl_use:N \l__ferreira_cv_skills_body_tl
\end{tabular}
\hfill % fill the line
% now the even skills
\tl_clear:N \l__ferreira_cv_skills_body_tl
\seq_indexed_map_function:NN \l__ferreira_cv_skills_seq \__ferreira_cv_skill_make_even:nn
\begin{tabular}[t]{@{}r@{\enspace}l@{}}
\tl_use:N \l__ferreira_cv_skills_body_tl
\end{tabular}
\group_end:
\par\addvspace{\medskipamount}
}
\cs_new_protected:Nn \__ferreira_cv_skills_add:nn
{
\seq_put_right:Nn \l__ferreira_cv_skills_seq { \skill{#1}{#2} }
}
\cs_new_protected:Nn \__ferreira_cv_skill_print:nn
{
\textbf{#1} & #2 \\
}
\cs_new_protected:Nn \__ferreira_cv_skill_make_odd:nn
{
\int_if_odd:nT { #1 } { \tl_put_right:Nn \l__ferreira_cv_skills_body_tl { #2 } }
}
\cs_new_protected:Nn \__ferreira_cv_skill_make_even:nn
{
\int_if_odd:nF { #1 } { \tl_put_right:Nn \l__ferreira_cv_skills_body_tl { #2 } }
}
\ExplSyntaxOff
\begin{document}
\noindent
\lipsum[1][1-5]
\skills{
\skill{High Level Languages}{Python, Mathematica}
\skill{Statistical Languages}{Stan}
\skill{Low Level Languages}{C, C\texttt{++}, CUDA}
\skill{Shells}{Zsh, Bash}
}
\noindent
\lipsum[1][1-5]
\skills{
\skill{High Level Languages}{Python, Mathematica}
\skill{Statistical Languages}{Stan}
\skill{Low Level Languages}{C, C\texttt{++}, CUDA}
\skill{Shells}{Zsh, Bash}
\skill{Typography}{\LaTeX}
}
\noindent
\lipsum[1][1-5]
\end{document}
其想法是构建两个包含奇数项和偶数项的表。