我创建了一个命令\dateentry
,将两个小页面并排放置。由于某种原因,条目之间的垂直间距不一致。当它围绕右侧小页面仅包含一行的条目时,间距似乎更大。这是为什么?我该如何修复此行为,以使条目之间的垂直间距始终相同?
梅威瑟:
\documentclass[
12pt,
parskip=half,
]{scrartcl}
\usepackage[
a4paper,
left=25mm,
right=20mm,
top=25mm,
bottom=30mm,
showframe,
]{geometry}
\usepackage{blindtext}
% Font
\usepackage{inconsolata}
\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault} %% Only if the base font of the document is to be sans serif
% Date-Entry-Command
\newcommand{\dateentry}[2]{
\begin{minipage}[c]{.15\linewidth}
\hfill#1
\end{minipage}
\hfill\vline\hfill
\begin{minipage}{.80\linewidth}
#2
\end{minipage}
\\
}
\begin{document}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text} \blindtext
}
\end{document}
答案1
这里提出了一种替代方法。
无需处理繁琐的垂直间距(见标准答案) 的 minipages,建议使用tikz
包进行精确定位和对齐。
该tikz
宏由三行组成:
(1)节点名称dates
已排版;
(2)将命名的节点title
排版在 的右侧某处dates
,其内容左对齐并位于框内0.75\linewidth
;并且
(3)在 的左侧(“西”)画一条垂直线title
。
最后段落结束,并可以添加可选的垂直空格。
可以看出,所有连续垂直线端点之间的距离都是相等的。
笔记: \footnotesize
不是一个环境或者命令,而是一个声明,就像一个开关:将把以下文本放在这个大小中。
\documentclass[
12pt,
parskip=half,
]{scrartcl}
\usepackage[
a4paper,
left=25mm,
right=20mm,
top=25mm,
bottom=30mm,
showframe,
]{geometry}
\usepackage{blindtext}
% Font
\usepackage{inconsolata}
\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault} %% Only if the base font of the document is to be sans serif
% *************************************** changed
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand\dateentry[2]{%
\begin{tikzpicture}
\node(dates) {#1};
\node(title)[right=0.2cm of dates, align=left, text width=0.75\linewidth]{#2};
\draw[thick] (title.south west)--(title.north west);
\end{tikzpicture}
\par% end of previous paragraph
%\vspace*{1ex}% optional vertical space in between
}
%*********************************************************
\begin{document}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize small text
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize small tex
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
}
\dateentry{20XX -- 20YY}{
\textbf{Title}\\
}
\dateentry{20XX -- 20YY}{
\textbf{Title}\\
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize small text
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize small text
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize small text \blindtext
}
\end{document}
更新后续问题之后
Atabularx
将处理单元格大小不同的情况,即左列和右列。该行将采用最高单元格的高度。
\documentclass[
12pt,
parskip=half,
]{scrartcl}
\usepackage[
a4paper,
left=25mm,
right=20mm,
top=25mm,
bottom=30mm,
showframe,
]{geometry}
\usepackage{blindtext}
% Font
\usepackage{inconsolata}
\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault} %% Only if the base font of the document is to be sans serif
%**************************************** added <<<<<<<<<<<<<<<<<<<<<
\usepackage{ragged2e}
\usepackage{tabularx}
\newcolumntype{P}[1]{>{\RaggedRight}m{#1}}
\renewcommand{\tabularxcolumn}[1]{m{#1} }
\setlength{\extrarowheight}{6pt} % add extra space between rows
\setlength{\tabcolsep}{8pt} % twice the space before and after the column
\newcommand\dateentry[2]{% ********* changed <<<<<<<<<<<<
\begin{tabularx}{\textwidth}{P{0.2\textwidth}|X}
#1& #2 \\
\end{tabularx}
\par% end of previous paragraph
% \vspace*{1ex}% optional vertical space in between
}
%*********************************************************
\begin{document}
\dateentry{20XX -- 20YY}{\textbf{Title} \newline \textit{italic text}, \footnotesize small text}
\dateentry{\textbf{Title} \newline \textit{italic text}, \footnotesize small tex}{20XX -- 20YY}
\dateentry{20XX -- 20YY}{\textbf{Title}}
\dateentry{\textbf{Title} \newline \textit{italic text}, \footnotesize small text }{ 20XX -- 20YY}
\dateentry{20XX -- 20YY}{ \textbf{Title} \newline \textit{italic text}, \footnotesize small text }
\dateentry{20XX -- 20YY}{ \textbf{Title} \newline \textit{italic text}, \footnotesize \blindtext }
\dateentry{\textbf{Title} \newline As any dedicated reader can clearly see, the Ideal of
practical reason is a representation of, as far as I know, the things
in themselves; as I have shown elsewhere}{\textbf{Title} \newline \itshape Let us suppose that the noumena have nothing to do
with necessity, since knowledge of the Categories is a
posteriori.
}
\end{document}
答案2
这里有几件事。第一,你的定义\dateentry
有一些(可能)意想不到的瑕疵,即虚假空间以及额外的换行符(因为\\
除了\par
(空行);您可能只想要\par
)。让我们清理一下。
\newcommand\dateentry[2]{%
\par
\begin{minipage}[c]{.15\linewidth}%
\hfill#1%
\end{minipage}%
\hfill\vline\hfill
\begin{minipage}{.80\linewidth}%
#2%
\end{minipage}%
\par
}
(它可以进一步改进,但这与这个问题无关。)
现在,为了清楚起见,我们还删除parskip
(并设置\parindent
为零以避免盒子过满)并查看结果。
\documentclass[
12pt,
% parskip=half,
]{scrartcl}
\usepackage[
a4paper,
left=25mm,
right=20mm,
top=25mm,
bottom=30mm,
showframe,
]{geometry}
\usepackage{blindtext}
% Font
\usepackage{inconsolata}
\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault} %% Only if the base font of the document is to be sans serif
% Date-Entry-Command
\newcommand\dateentry[2]{%
\par
\begin{minipage}[c]{.15\linewidth}%
\hfill#1%
\end{minipage}%
\hfill\vline\hfill
\begin{minipage}{.80\linewidth}%
#2%
\end{minipage}%
\par
}
\setlength\parindent{0pt}
\begin{document}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text}
}
\dateentry{20XX -- 20YY}{
\textbf{Title} \\
\textit{italic text}, \footnotesize{small text} \blindtext
}
\rule{1em}{9pt} \textbf{Title}
\rule{1em}{9pt}
\rule{1em}{9pt}
\rule{1em}{20pt}
\rule{1em}{20pt}
\rule{1em}{20pt}
\rule{1em}{9pt}
\rule{1em}{9pt}
\rule{1em}{9pt}
\end{document}
如您所见,仍然存在差异。 这是因为单行框小于\baselineskip
(因此它们的基线之间的距离为\baselineskip
),而多行框较高(因此框之间的距离为\lineskip
)。 总体而言,这是正确的,正如我添加到 MWE 的框所示。
为了解决这个问题,你可以给盒子一个最小的高度和深度(例如包括一个\rule[-.2\baselineskip]{0pt}{\baselineskip}
),但我建议使用类似的包tcolorbox
为您的盒子提供更多复杂的选择。