\hrule 在下降符號之後

\hrule 在下降符號之後

我正在嘗試用乳膠重做我的簡歷,但在 \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)。

我在小頁中排版了兩個範例,以便更好地看到垂直對齊是否符合要求。兩條沉重的規則只是劃定了界線。迷你頁開頭\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>})。

相關內容