\hrule 位于下降部之后

\hrule 位于下降部之后

我正在尝试用 latex 重做我的简历,但在放置 \hrule 时遇到了一个小问题。我通过以下方式为每个部分定义一个类别环境:

\newenvironment{category}[1]
{%                                                                                                                            
{\bf{#1}}                                                                                                                     
  \medskip                                                                                                            
  \hrule % Horizontal line                                                                                                    
  \medskip                                                                                                            
\begin{itemize}[label={$-$},itemsep=0.15cm]                                                                                   
}
{%                                                                                                                            
\end{itemize}                                                                                                                 
\bigskip                                                                                                                      
}

当我使用 \begin{category}{XXX} 时,如果 XXX 有降部,则文本底线和 hrule 之间的间距会变大。我宁愿它保持不变,并让降部更靠近线条。有什么办法吗?

答案1

垂直材料中的\hrule会破坏基线跳跃网格,因为它会重置内部\prevdepth寄存器。但您可以将寄存器的值保存到变量中,然后打印\hrule并恢复此寄存器。然后可以保留基线跳跃网格。

正常行为:

Previous line
\hrule     % this rule is printed immediately below the line without space.
Next line  % this line is printed without space because \prevdepth is reset.

保存\prevdepth

Previous line
\par \dimen0=\prevdepth  % the \prevdepth value is saved
\hrule     % this rule is printed immediately below the line without space.
\prevdepth=\dimen0   % restoring \prevdepth
Next line  % this line keeps the baselineskip-grid
           % but .4pt is added (the rule thickness)

转向\hrule电网:

Previous line
\par \dimen0=\prevdepth  % the \prevdepth value is saved
\kern \dimexpr 3pt-\prevdepth  % the space 3pt from baseline
\hrule     % hrule 3pt from previous baseline
\prevdepth=\dimen0   % restoring \prevdepth
\kern \dimexpr \prevdepth-3pt-.4pt \relax % space correction
Next line % Next line fits to baselineskip-grid.

因此,您可以定义\myhrule并执行以下操作:

\newdimen\tmpdim
\def\myhrule{\par
   \tmpdim=\prevdepth
   \kern\dimexpr 3pt-\prevdepth
   \hrule
   \prevdepth=\tmpdim
   \kern\dimexpr \prevdepth-3pt-.4pt \relax
}

Previous line.
\myhrule
Next line.

\bye

答案2

TeX 在 之前和之后不插入行间粘连\hrule,因此您必须教它您想要独立于上升部和下降部来尊重距离。最简单的方法是使用 struts:

\documentclass{article}
\usepackage{enumitem}

\newenvironment{category}[1]
 {\par\noindent\textbf{\strut#1\strut}
  \medskip % <-------- adjust here
  \hrule % Horizontal line
  \medskip
  \begin{itemize}[label={--},itemsep=0.15cm]
  \prevdepth=\dp\strutbox
 }
 {\end{itemize}
  \bigskip
 }

\begin{document}

\hrule height 4pt % just to see the two boxes
\noindent
\begin{minipage}[t]{0.45\textwidth}
\vspace{0pt}% to set the alignment point
Some text before
\begin{category}{abcd}
\item acer
\end{category}
Some text after
\end{minipage}
\begin{minipage}[t]{0.45\textwidth}
\vspace{0pt}% to set the alignment point
Some text before
\begin{category}{ghij}
\item dgf
\end{category}
Some text after
\end{minipage}

\hrule height 4pt % just to see that the two boxes 
\end{document}

“类别”被支柱包围,在打印第一个项目之前,我们假设它之前的行具有与支柱相等的深度(\prevdepth=\dp\strutbox)。

我在 minipages 中排版了这两个示例,以便更好地看到垂直对齐是否符合要求。两条粗线只是标记边界。minipages 开头\vspace{0pt}的 再次只是为了举例,它将设置两个框的对齐点。

在此处输入图片描述

答案3

您可以使用 删除下降深度\raisebox。 的以下定义\raisebox包含在source2e.pdf

\raisebox{⟨distance⟩}[⟨height⟩][⟨depth⟩]{⟨box⟩}

增加⟨box⟩长度⟨distance⟩(如果为⟨distance⟩负数,则减少)。使 TeX 认为新框延伸⟨height⟩到线的上方和⟨depth⟩下方,总垂直长度为⟨height⟩+ 。 &⟨depth⟩的默认值= 新位置框的实际高度和深度。⟨height⟩⟨depth⟩

因此,考虑使用\raisebox{0pt}[\height][0pt]{<stuff>}\height是的自然高度<stuff>):

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem}

\newenvironment{category}[1]{%
    \par\noindent% No paragraph indent
    \raisebox{0pt}[\height][0pt]{\textbf{#1}}\par
    \medskip
    \hrule% Horizontal rule
    \medskip
    \begin{itemize}[label={--},itemsep=.5em]
  }{%
    \end{itemize}
    \bigskip
  }

\begin{document}

Here is some content
\begin{category}{abcdef}
  \item something
  \item something else
\end{category}

Some more content
\begin{category}{ghijkl}
  \item something
  \item something else
\end{category}

\end{document}

注意使用\par进入垂直模式。否则,(第一次)使用\medskip是多余的,只能在以后(通过其他方式进入垂直模式后)发出。

更极端的可能是\smash内容,因此它根本不占用垂直高度/深度(类似于\raisebox{0pt}[0pt][0pt]{<stuff>})。

相关内容