表格第一列和最后一列适合文本宽度

表格第一列和最后一列适合文本宽度

我正在尝试创建一个新表格,其中第一列的文本恰好从左边距开始,最后一列的文本恰好从右边距结束。

此外,我还希望前两列非常靠近,后两列也靠近,并且中间留出最大的空间。

这是我目前得到的,非常接近,但第一列并不完全在第一个边距,最后一列也不完全在右边距:

\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}

其想法是构建两个包含奇数项和偶数项的表。

在此处输入图片描述

相关内容