
Ich versuche, meinen Lebenslauf in Latex neu zu gestalten und habe ein kleines Problem mit der Platzierung von \hrule. Ich definiere eine Kategorieumgebung für jeden Abschnitt über
\newenvironment{category}[1]
{%
{\bf{#1}}
\medskip
\hrule % Horizontal line
\medskip
\begin{itemize}[label={$-$},itemsep=0.15cm]
}
{%
\end{itemize}
\bigskip
}
Wenn ich eine \begin{category}{XXX} habe, wird der Abstand zwischen der unteren Textzeile und der Unterlinie größer, wenn XXX Unterlängen hat. Ich hätte es lieber, wenn dieser Abstand konstant bliebe und die Unterlängen näher an der Zeile wären. Gibt es eine Möglichkeit, dies zu tun?
Antwort1
Das \hrule
im vertikalen Material unterbricht das Baselineskip-Raster, da es das interne \prevdepth
Register zurücksetzt. Sie können den Wert des Registers jedoch in einer Variablen speichern, \hrule
dieses Register ausdrucken und wiederherstellen. Dann kann das Baselineskip-Raster beibehalten werden.
Normales Verhalten:
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.
Haltung \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)
Umstellung \hrule
auf das Raster:
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.
Sie können also \myhrule
Folgendes definieren und tun:
\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
Antwort2
TeX fügt vor und nach keinen Zeilenabstand ein \hrule
, daher muss man ihm beibringen, dass man die Abstände unabhängig von Ober- und Unterlängen einhalten will. Am einfachsten geht das mit Streben:
\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}
Die „Kategorie“ ist von Streben umgeben und direkt bevor das erste Element gedruckt wird, tun wir so, als hätte die Zeile davor die gleiche Tiefe wie eine Strebe ( \prevdepth=\dp\strutbox
).
Ich habe die beiden Beispiele in Miniseiten gesetzt, um besser zu sehen, dass die vertikale Ausrichtung wie gewünscht ist. Die beiden dicken Linien markieren nur die Grenzen. Die Linie \vspace{0pt}
am Anfang der Miniseiten dient wiederum nur als Beispiel und legt den Ausrichtungspunkt der beiden Kästchen fest.
Antwort3
Sie können die Unterlängentiefe entfernen, indem Sie verwenden \raisebox
. Die folgende Definition von \raisebox
ist enthalten insource2e.pdf
:
\raisebox{⟨distance⟩}[⟨height⟩][⟨depth⟩]{⟨box⟩}
Hebt die Länge
⟨box⟩
nach oben⟨distance⟩
(nach unten, wenn⟨distance⟩
negativ). TeX geht davon aus, dass sich die neue Box⟨height⟩
über und unter der Linie erstreckt⟨depth⟩
, mit einer vertikalen Gesamtlänge von⟨height⟩
+⟨depth⟩
. Standardwerte von⟨height⟩
&⟨depth⟩
= tatsächliche Höhe und Tiefe der Box an der neuen Position.
Erwägen Sie also die Verwendung von \raisebox{0pt}[\height][0pt]{<stuff>}
( \height
ist die natürliche Höhe von <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}
Beachten Sie die Verwendung von \par
zum Aufrufen des vertikalen Modus. Andernfalls \medskip
ist die (erste) Verwendung von überflüssig und wird erst später ausgegeben (sobald der vertikale Modus auf andere Weise aktiviert ist).
Noch extremer könnte es sein, \smash
den Inhalt so zu gestalten, dass er überhaupt keine vertikale Höhe/Tiefe einnimmt (ähnlich wie \raisebox{0pt}[0pt][0pt]{<stuff>}
).