将水平线向左移动

将水平线向左移动

我正在使用水平线分隔文本,我希望该线从当前左边距的左侧开始。我正在使用以下代码,但显然这不是正确的方法,因为我收到警告:"Overfull \hbox (2.22221pt too wide) in paragraph" 正确的方法是什么?

谢谢。

\documentclass{article}
\usepackage{xcolor}
\usepackage[english]{babel}
\usepackage{blindtext}
 \newcommand{\blockline}{\noindent\hspace{-0.05\textwidth}
    \textcolor{orange}{\rule{1.05\textwidth}{5pt}}}
\begin{document}
    \noindent\blindtext

    \blockline

    \noindent\blindtext
\end{document}

答案1

第一行末尾有一个虚假的空白(您应该将其注释掉)。另外,我会\par在定义的开头使用它,这样\blockline总是结束一个段落;为了防止该行被遗弃,我会\par\nobreak在定义的末尾使用类似的东西:

\newcommand{\blockline}{\par\noindent\hspace{-0.05\textwidth}%
    \textcolor{orange}{\rule{1.05\textwidth}{5pt}}\par\nobreak}

答案2

我建议另一个\blockline更复杂的定义,完全不允许在规则前中断,并且更容易控制规则前后的间距:

\newcommand{\blockline}{\par\nobreak % don't break a page here
  \moveleft0.05\textwidth\vbox{% we want the rule to protrude on the left
    \hsize=1.05\textwidth % correct the length
    \kern\the\prevdepth % don't take into account the depth of the preceding line
    \kern3pt % space before the rule
    \color{orange}\hrule height 5pt width\hsize % the rule
    \kern3pt % space after the rule
  }\nointerlineskip % no additional space after the rule
}

这样我们就确保前后一行的基线正好相距 3+5+3 点。

答案3

这里的结果实际上并不是由于\hspace您可能认为的不正确,而是在您的代码中插入了虚假空格:

\documentclass{article}
\usepackage{xcolor}
\usepackage[english]{babel}
\usepackage{blindtext}
\newcommand{\blockline}{\noindent\hspace{-0.05\textwidth}% <--- note the %
  \textcolor{orange}{\rule{1.05\textwidth}{5pt}}}
\begin{document}
\noindent\blindtext

\blockline

\noindent\blindtext
\end{document}

相关内容