为什么会有额外的空间?

为什么会有额外的空间?

我尝试仅在定义了变量时才使用特定部分。一切似乎都有效,但是 B 人的姓名和地址之间有一个额外的空格,尽管使用的代码与 A 人相同...

\documentclass{article}

\setlength{\parindent}{0pt}

\newcommand{\AnredeMieterA}{Mrs.}
\newcommand{\NameMieterA}{Person A}
\newcommand{\AdresseMieterA}{address A}
\newcommand{\AnredeMieterB}{Mrs.}
\newcommand{\NameMieterB}{Person B}
\newcommand{\AdresseMieterB}{address B}

\begin{document}

\medskip \textbf{\AnredeMieterA\ \NameMieterA}\\ 
\medskip wohnhaft \textbf{\AdresseMieterA}\\ 
\ifx\NameMieterB\undefined
\else
\medskip sowie \\
\medskip \textbf{\AnredeMieterB\ \NameMieterB}\\ 
\medskip wohnhaft \textbf{\AdresseMieterB}\\ 
\fi

\end{document}

为什么?

在此处输入图片描述

答案1

\medskip在水平模式下\vspace{\medskipamount}的使用\vspace不会立即添加垂直空格,而是在当前行之后添加。

因为\\在对齐文本中不会形成段落,所以在 之后仍然处于水平模式\\。因此,\medskipbeforewohnhaft会在 之前添加空格,sowie而不是在 之前wohnhaft

\par正如 David 在评论中解释的那样,使用 而不是 ,结果会有所不同\\。这是因为,在\par您始终处于垂直模式之后,在垂直模式下会\vspace立即添加垂直空间:

\documentclass{article}

\setlength{\parindent}{0pt}

\newcommand{\AnredeMieterA}{Mrs.}
\newcommand{\NameMieterA}{Person A}
\newcommand{\AdresseMieterA}{address A}
\newcommand{\AnredeMieterB}{Mrs.}
\newcommand{\NameMieterB}{Person B}
\newcommand{\AdresseMieterB}{address B}

\begin{document}

\medskip \textbf{\AnredeMieterA\ \NameMieterA}\par
\medskip wohnhaft \textbf{\AdresseMieterA}\par
\ifx\NameMieterB\undefined
\else
\medskip sowie \par
\medskip \textbf{\AnredeMieterB\ \NameMieterB}\par
\medskip wohnhaft \textbf{\AdresseMieterB}\par
\fi

\end{document}

另一个建议是使用可选参数\\

\documentclass{article}

\setlength{\parindent}{0pt}

\newcommand{\AnredeMieterA}{Mrs.}
\newcommand{\NameMieterA}{Person A}
\newcommand{\AdresseMieterA}{address A}
\newcommand{\AnredeMieterB}{Mrs.}
\newcommand{\NameMieterB}{Person B}
\newcommand{\AdresseMieterB}{address B}

\begin{document}

\textbf{\AnredeMieterA\ \NameMieterA}\\[\medskipamount] 
wohnhaft \textbf{\AdresseMieterA}\\[\medskipamount]
\ifx\NameMieterB\undefined
\else
sowie \\[\medskipamount]
\textbf{\AnredeMieterB\ \NameMieterB}\\[\medskipamount]
wohnhaft \textbf{\AdresseMieterB}
\fi

\end{document}

或者

\documentclass{article}

\setlength{\parindent}{0pt}

\newcommand{\AnredeMieterA}{Mrs.}
\newcommand{\NameMieterA}{Person A}
\newcommand{\AdresseMieterA}{address A}
\newcommand{\AnredeMieterB}{Mrs.}
\newcommand{\NameMieterB}{Person B}
\newcommand{\AdresseMieterB}{address B}

\begin{document}

\textbf{\AnredeMieterA\ \NameMieterA}%
\\[\medskipamount] wohnhaft \textbf{\AdresseMieterA}%
\ifx\NameMieterB\undefined
\else
\\[\medskipamount] sowie
\\[\medskipamount] \textbf{\AnredeMieterB\ \NameMieterB}
\\[\medskipamount] wohnhaft \textbf{\AdresseMieterB}
\fi

\end{document}

但是因为我会避免\\在两端对齐的文本中使用,所以我建议明确切换到不规则文本,或者使用\raggedright或:

\documentclass{article}

\newcommand{\AnredeMieterA}{Mrs.}
\newcommand{\NameMieterA}{Person A}
\newcommand{\AdresseMieterA}{address A}
\newcommand{\AnredeMieterB}{Mrs.}
\newcommand{\NameMieterB}{Person B}
\newcommand{\AdresseMieterB}{address B}

\begin{document}

\begin{flushleft}
\textbf{\AnredeMieterA\ \NameMieterA}%
\\[\medskipamount] wohnhaft \textbf{\AdresseMieterA}%
\ifx\NameMieterB\undefined
\else
\\[\medskipamount] sowie
\\[\medskipamount] \textbf{\AnredeMieterB\ \NameMieterB}
\\[\medskipamount] wohnhaft \textbf{\AdresseMieterB}
\fi
\end{flushleft}

\end{document}

在此处输入图片描述

所有示例都会导致块的行之间垂直间距相同,但如果块前后有文本,则块前后的垂直距离可能会有所不同。如果\parskip要更改,第一个例子也可能不同。

相关内容