fbox 与其余文本未对齐

fbox 与其余文本未对齐

fbox定义as的宽度时\textwidth-2\fboxsep-2\fboxrule,它相对于其余文本仍然有点突出。我是否遗漏了宽度/长度?

\documentclass{article}
\usepackage{lipsum,xcolor}
\begin{document}
    \lipsum[1][1-5]

    \edef\oldfboxsep{\the\fboxsep}
    \fboxsep=15pt
    \noindent\colorbox{gray!15!white}{
    \parbox{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}{%
        \lipsum[1][1-3]
    }}
    \fboxsep=\oldfboxsep

    \lipsum[1][6-10]
\end{document}

输出如下,红线和蓝线显示错位。

MWE 截图

答案1

这是一个很常见的问题,很容易犯,而且经常被忽视。(你眼睛真尖!)

(La)TeX 将行尾解释为空格,因此如果不需要额外的空格,则必须将行尾设置为“不可见”。这可以通过插入%,

在此示例中,需要两个:

  • white}{上线后\noindent
  • \lipsum[1][1-3]

那是,

\noindent\colorbox{gray!15!white}{%
\parbox{\dimexpr\textwidth-2\fboxsep 2\fboxrule\relax}{%
    \lipsum[1][1-3]%
}}

后面的“明显”位置已经有一个了\relax}{%,所以您知道这个原理。只需仔细查看其他潜在的空白点并清理需要清理的空白点即可。

编辑
正如问题作者在评论中指出的那样,段落末尾的空格通常不会添加到宽度中,因此%后面的空格\lipsum是不需要的。但有两种情况下,段落末尾的空格做出改变:

  • 如果段落的最后一个元素被强制右对齐,就像题词一样;
  • 如果段落最后一行的文本完全填满该行并且没有其他空格的空间,则该空格将转到下一行,因此可能会留下可见的空白行。

我没有测试过第一种情况下会发生什么,但经常遇到第二种情况,并且被问及有关问题。在%不会造成损害的情况下,将其包括在内也无妨。

相关内容