为何图形不尊重行尾?

为何图形不尊重行尾?

我经常看到这种情况,内嵌图形(在本例中是 tikz 图片)不遵守换行符并且像单词一样流动。

在此示例文档中,没有强制换行,并且图片突出到页边距甚至超出范围。(您看到的是来自 evince 的屏幕截图,您可以看到两侧的页边距。

反叛图片

如果这是自然行为,我怎样才能使图形不粘在边缘?

梅威瑟:

\documentclass[]{article}
\usepackage[]{pgfplots}
\begin{document}
aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa %
\begin{tikzpicture}
\begin{axis}
\end{axis}
\end{tikzpicture}
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb
\end{document}

发布问题后,我发现可能存在重复: 如何才能让 LaTeX 正确地在图形之间断线?如何避免在整个文档中使用 \sloppy 来修复 \hbox 过满的问题? .\sloppy似乎是一个部分答案,因为它必须有选择地用于有问题的段落,所以一个通用的解决方案也很好。

答案1

对你的问题的各种评论表明了两件事:

1)每个人都建议不要将大图像用作内联字符

2)您(无论出于何种原因)希望将大图像设置为内联字符,而不是例如单独的图形。

鉴于此,让我回顾一下评论的亮点。

1) 如果tikzpicture位于水平盒子(hbox)中而不是垂直盒子(vbox)中,并且未在其自己的环境或组中单独设置,则将被视为内联字符。

2) LaTeX 的工作方式是,它一次设置整个段落,试图满足一组加权约束(权重由“惩罚”设置,\sloppy仅定义不同的权重值)。

3) 如果您使用不规则右对齐,约束会更少,LaTeX 会提供换行符以防止边距超出。但是,如果使用完全对齐,LaTeX 可能无法使用默认惩罚来得出令人满意的解决方案。在这些情况下,它会产生“过满的水平盒”,在这种情况下表现为边距超出。

4) 您发现\sloppy“修复”了问题,但您担心自己不想草率地准备一整份文档。

所以我的第一个修复是使用sloppypar环境来仅修复有问题的段落(MWE 中的第 1 段)。

然后你问,是否有人能有效地为部分段落提供一个类似 sloppypar 的解决方案。我想说你的情况越来越糟了,但我似乎记得这个解决方案,偷工减料 - 如何删除 1 pt (0.3515 mm) 左右,用于将内容压缩到一行。在这里,我使用它来将内容拉伸到部分行中,在 MWE 的第 2 段中。这比 更糟糕,sloppypar因为单词间距在行中间发生变化(耶!),但至少带有字符的行bbb并不“混乱”(如您所要求的)。

MWE 的第 3 段是您自己的例子,用以证明这sloppypar并不延伸到文档的其余部分。

\documentclass[]{article}
\usepackage[]{pgfplots}
\def\squeeze#1{\squeezeit#1 \relax\relax}
% REVISED SOLUTION
\def\squeezeit#1 #2\relax{#1\if\relax#2\else
  \findlast#1\relax\relax%
    \if.\LastChar\hfil\else
      \if,\LastChar\hfil\else
        \hfil\hfil%
       \fi
    \fi
  \squeezeit#2\relax\fi%
}
\def\findlast#1#2\relax{\def\LastChar{#1}\if\relax#2\else\findlast#2\relax\fi}
\textheight 9in
\begin{document}
\begin{sloppypar}
aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa %
\begin{tikzpicture}
\begin{axis}
\end{axis}
\end{tikzpicture}
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb
\end{sloppypar}

\squeeze{aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa} aaaaaaaa %
\begin{tikzpicture}
\begin{axis}
\end{axis}
\end{tikzpicture}
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb

aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa %
\begin{tikzpicture}
\begin{axis}
\end{axis}
\end{tikzpicture}
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb
\end{document}

在此处输入图片描述

答案2

它与图形无关,只是充当一个不能连字符的单词:

在此处输入图片描述

\documentclass[]{article}
\setlength\parfillskip{2\baselineskip}
\begin{document}

\noindent X\dotfill X

aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa %
ZZZZZZZZZZZZZZZZZZZZZZZZ
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb

\noindent X\dotfill X

\begin{sloppypar}
aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa %
ZZZZZZZZZZZZZZZZZZZZZZZZ
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb
\end{sloppypar}

\noindent X\dotfill X

aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa\\
ZZZZZZZZZZZZZZZZZZZZZZZZ
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb

\noindent X\dotfill X

aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaa aaaaaaaa\linebreak
ZZZZZZZZZZZZZZZZZZZZZZZZ
 bbbbbbbbbb bbbbbbbbbbbb bbbbbbbbbb

\end{document}

相关内容