如何在自定义列表环境中保持相同的垂直间距,而不管下降部/上升部?

如何在自定义列表环境中保持相同的垂直间距,而不管下降部/上升部?

我目前正在为简历定义自定义列表环境。该环境按预期工作,但有一个警告。即,带有升序和降序的字母会影响行宽,从而使输出变得丑陋。MWE 就是这样:

\documentclass{article}

\pagestyle{empty}

\setlength{\tabcolsep}{0pt}
\newenvironment{entrylist}{%
  \noindent
  \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ll}
}{%
  \end{tabular*}
}
\renewcommand{\bfseries}{}
\newcommand{\entry}[4]{%
  \spaceskip0pt\xspaceskip0pt % for ragged2e document settting
  #1\hspace*{0pt plus -1fil}\mbox{}&\parbox[t]{10.00cm}{%
    \textbf{#2}%
    \hfill%
    {\footnotesize #3\par}%no!\\%
    #4\vspace{\parsep}%
  }\\}

\begin{document}

  \begin{entrylist}

   \entry
    {Office addr}
    {A very fancy building in a very fancy place}
    {}
    {}

   \entry
    {Web addr}
    {www.somename.com}
    {}
    {}

  \entry
    {Pers email}
    {somename a aaa}
    {}
    {}

  \entry
    {Work email}
    {veryfancyname2 a aaa}
    {}
    {}
    
  \entry
    {UK phone}
    {+00 0000 000000}
    {}
    {}
    
  \entry
    {SP phone}
    {+00 000 000 000}
    {}
    {}

\end{entrylist}

\end{document}

在此处输入图片描述

我声称输出很丑陋,因为例如第 1 行和第 2 行之间的空白大于第 2 行和第 3 行之间的空白。这可能有点难以看出,但我提到的不同间距确实存在,我确信造成这种情况的罪魁祸首是使用带有降部的字母。

我想找到一种方法确保上面定义的列表环境保持行间相同的空间量,无论字母是否有升部/降部。

非常感谢大家抽出时间。

答案1

我在一条评论中建议\strut在 的开头添加一个\parbox,这样 parbox 的“顶部”将占据文本行的整个垂直范围。通常,我可能还会建议\strut在 的末尾添加一个\parbox(用于换行的情况)。但是,在这种情况下,因为 parbox 在末尾附近有 ,所以即使为空白, {...\par}#4\vspace{\parsep}a\strut也会使 退出垂直模式#4,这可能不是 OP 的意图。OP 向我保证,这种方法(一\strut开始只有一个)让他很满意。

\documentclass{article}

\pagestyle{empty}

\setlength{\tabcolsep}{0pt}
\newenvironment{entrylist}{%
  \noindent
  \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ll}
}{%
  \end{tabular*}
}
\renewcommand{\bfseries}{}
\newcommand{\entry}[4]{%
  \spaceskip0pt\xspaceskip0pt % for ragged2e document settting
  #1\hspace*{0pt plus -1fil}\mbox{}&\parbox[t]{10.00cm}{\strut%
    \textbf{#2}%
    \hfill%
    {\footnotesize #3\par}%no!\\%
    #4\vspace{\parsep}%
  }\\}

\begin{document}

  \begin{entrylist}

   \entry
    {Office addr}
    {A very fancy building in a very fancy place}
    {}
    {}

   \entry
    {Web addr}
    {www.somename.com}
    {}
    {}

  \entry
    {Pers email}
    {somename a aaa}
    {}
    {}

  \entry
    {Work email}
    {veryfancyname2 a aaa}
    {}
    {}
    
  \entry
    {UK phone}
    {+00 0000 000000}
    {}
    {}
    
  \entry
    {SP phone}
    {+00 000 000 000}
    {}
    {}

\end{entrylist}

\end{document}

在此处输入图片描述

答案2

我不确定这个\parbox是干什么用的。你可以利用tabularx它。

\documentclass{article}
\usepackage{tabularx}

\pagestyle{empty}

\newenvironment{entrylist}{%
  \noindent
  \tabularx{\textwidth}[t]{@{}l@{\quad}X@{}}
}{%
  \endtabularx
}
\newcommand{\entry}[4]{%
  #1&#2\hfill
  \mbox{\footnotesize #3}%
  \if\relax\detokenize{#4}\relax\else\\#4\fi
  \\\noalign{\vspace{\parsep}}%
}

\begin{document}

\noindent X\dotfill X

% this is just to show the baselines
\noindent\makebox[0pt][l]{\hbox{\vrule\vtop{
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
  \hbox{\strut\vrule height0.1pt depth 0.1pt width \textwidth}\vskip\parsep
}}}%
  \begin{entrylist}

   \entry
    {Office addr}
    {A very fancy building in a very fancy place}
    {}
    {}

   \entry
    {Web addr}
    {www.somename.com}
    {}
    {}

  \entry
    {Pers email}
    {somename a aaa}
    {}
    {}

  \entry
    {Work email}
    {veryfancyname2 a aaa}
    {}
    {}
    
  \entry
    {UK phone}
    {+00 0000 000000}
    {}
    {}
    
  \entry
    {SP phone}
    {+00 000 000 000}
    {}
    {}

\end{entrylist}

\end{document}

在此处输入图片描述

相关内容