表格单元格内的换行行距问题

表格单元格内的换行行距问题

longtable强制换行时,环境中的行距​​出现问题。以下代码应该可以说明该问题。

\documentclass[11pt,paper=a4,11pt,parskip=half,draft]{scrartcl}

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{longtable}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{xcolor}

\usepackage{blindtext}

\definecolor{darkblue}{HTML}{212650}
\definecolor{grey}{HTML}{666666}

\newcommand{\itemdate}[1]{{\sffamily #1}}
\newcommand{\itemhead}[1]{{\sffamily\textcolor{darkblue}{\bfseries #1}}}
\newcommand{\itemplace}[1]{{\sffamily\itshape\footnotesize #1}}
% don't know why this cannot be local scope only ???!!!!
\newcommand{\iteminfo}[1]{\scriptsize #1}

% http://tex.stackexchange.com/a/7348/46403
% ragged2e packages provides text hyphenation in columns
\newcolumntype{L}[1]{>{\raggedright\hspace{0pt}\arraybackslash}p{#1}}   % left with dimension
\newcolumntype{J}[1]{>{\justifying\hspace{0pt}\arraybackslash}p{#1}}    % justify with dimension

\newcommand{\colwidth}[1]{%
    \dimexpr #1\textwidth-2\tabcolsep%
}%

\begin{document}

\begin{longtable}[!htbp]{|@{}L{\colwidth{0.2}}|L{\colwidth{0.8}}@{}|}

    \hline
    \itemdate{Itemdate 1} &
    \itemhead{Itemhead 1} \newline
    \itemplace{Itemplace 1} \vspace{3pt}\newline
    \iteminfo{\textbf{Iteminfo 1.1}: \blindtext[1]}
    \vspace{3pt}\newline%
    \iteminfo{\textbf{Iteminfo 1.2}: \blindtext[1]} \\

    \hline
    \itemdate{Itemdate 2} &
    \itemhead{Itemhead 2} \newline
    \itemplace{Itemplace 2} \\

    \hline
    \itemdate{Itemdate 3} &
    \itemhead{Itemhead 3} \newline
    \itemplace{Itemplace 3} \\
\end{longtable}

\end{document}

也可访问https://www.overleaf.com/2029617ptbycv#/5121602/

我希望这足以说明这个问题。

如果你看一下条目标题 1商品位置 1,这是我想要的行距。

我认为 Itemhead 2 和 Itemplace 2 以及 Itemhead 3 和 Itemplace 3 之间的间距对于单个换行符来说太宽了。应该使用单倍行距。

现在我不知道是什么迫使 latex 在第 2 行和第 3 行的 Itemhead 和 Itemplace 行之间使用更宽的行距。这一定与 Itemplace 行后面的文本有关。因为如果我在命令\iteminfo之后调用\itemplace,它会显示这种奇怪的行为。

我在 OSX 10.10.1 上使用 MacTex 2014。

这是它在 OSX 10.10.1 Preview-App 上的样子 这是它在 OSX 10.10.1 Preview-App 上的样子

答案1

您应该始终包括段落结尾 (不是 \newline) 如果有大小变化。整个段落的基线间距在段落末尾有效,因此您得到的设置不一致。

\documentclass[11pt,paper=a4,11pt,parskip=half,draft]{scrartcl}

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{longtable}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{xcolor}

\usepackage{blindtext}

\definecolor{darkblue}{HTML}{212650}
\definecolor{grey}{HTML}{666666}

\newcommand{\itemdate}[1]{{\sffamily #1}}
\newcommand{\itemhead}[1]{{\sffamily\textcolor{darkblue}{\bfseries #1}}\par}
\newcommand{\itemplace}[1]{{\sffamily\itshape\footnotesize #1\par}}
% don't know why this cannot be local scope only ???!!!!
\newcommand{\iteminfo}[1]{{\scriptsize #1\par}}

% http://tex.stackexchange.com/a/7348/46403
% ragged2e packages provides text hyphenation in columns
\newcolumntype{L}[1]{>{\raggedright\hspace{0pt}\arraybackslash}p{#1}}   % left with dimension
\newcolumntype{J}[1]{>{\justifying\hspace{0pt}\arraybackslash}p{#1}}    % justify with dimension

\newcommand{\colwidth}[1]{%
    \dimexpr #1\textwidth-2\tabcolsep%
}%

\begin{document}

\begin{longtable}[!htbp]{|@{}L{\colwidth{0.2}}|L{\colwidth{0.8}}@{}|}

    \hline
    \itemdate{Itemdate 1} &
    \itemhead{Itemhead 1}
    \itemplace{Itemplace 1}
    \iteminfo{\textbf{Iteminfo 1.1}: \blindtext[1]}
    \iteminfo{\textbf{Iteminfo 1.2}: \blindtext[1]} \\

    \hline
    \itemdate{Itemdate 2} &
    \itemhead{Itemhead 2}
    \itemplace{Itemplace 2} \\

    \hline
    \itemdate{Itemdate 3} &
    \itemhead{Itemhead 3}
    \itemplace{Itemplace 3} \\
\end{longtable}

\end{document}

答案2

您获得不同间距结果的原因是因为(a)您使用\newline而不是\par插入换行符,并且(b)对 Itemhead(\normalsize)、Itemplace(\footnotesize)和 Iteminfo(\scriptsize)类型的项目使用了不同的字体大小。

(逻辑)段落中使用的行间空间取决于当前有效的字体大小结尾当前段落。重要的是,\newline插入换行符,但它确实不是开始一个新段落。因此,在 Itemhead1/Itemplace1/Iteminfo1 组中,Itemhead1 和 Itemplace1 之间的间距适合\scriptsize材料(因此非常紧密),就像\scriptsize在“段落”末尾一样。由于\vspace{3pt}每个 Iteminfo 元素前面都有说明,因此这种效果被掩盖了。

相反,在 Itemhead2/Itemplace2 和 Itemhead3/Itemplace 3 的情况下,段落的最终字体大小为\footnotesize,因此您会获得比第一组(略)宽的间距。

如果您绝对、肯定必须获得适合材料的非常紧密的间距,您可以通过在 之后立即\scriptsize插入指令来获得此结果。但是,我认为您最好用 替换所有指令并删除指令。\scriptsize\itemplace{Itemplace 2}\newline\par\vspace{3pt

相关内容