
라텍스로 이력서를 다시 작성하려고 하는데 \hrule 배치에 사소한 문제가 발생했습니다. 나는 다음을 통해 각 섹션에 대한 카테고리 환경을 정의합니다.
\newenvironment{category}[1]
{%
{\bf{#1}}
\medskip
\hrule % Horizontal line
\medskip
\begin{itemize}[label={$-$},itemsep=0.15cm]
}
{%
\end{itemize}
\bigskip
}
\begin{category}{XXX}가 있을 때, XXX에 디센더가 있으면 텍스트의 맨 아래 줄과 줄 사이의 공간이 더 커집니다. 차라리 일정하게 유지하고 디센더를 선에 더 가깝게 두는 것이 좋습니다. 이를 수행할 수 있는 방법이 있습니까?
답변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
어센더와 디센더와 관계없이 거리를 존중하도록 가르쳐야 합니다. 가장 간단한 방법은 스트럿을 사용하는 것입니다.
\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>}
).