我正在使用水平线分隔文本,我希望该线从当前左边距的左侧开始。我正在使用以下代码,但显然这不是正确的方法,因为我收到警告:"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}