短篇故事

短篇故事

短篇故事

如果某些文本无法全部放在当前行,我们希望全部文本移至下一行。我们该如何做呢?

中篇故事

假设我们有一串文本“banana banana”。将“banana [...]”的前几个字符放在当前行,将 banana 字符串的后半部分放在下一行,这是不理想的。

如果整个字符串适合当前行,那么就好,将字符串放在当前行。否则将字符串放在下一行。

不理想的情况:

apples apples apples banana
banana. cantaloupe cantaloupe

期望:

% a line break is inserted at the beginning
% of the bananas because they won't all fit
% on the current line.

apples apples apples 
banana banana. cantaloupe cantaloupe

我们如何编写 LaTeX 代码来实现这一点?

长话短说

考虑以下测试文件。它不会编译,因为“ KEEP TOGETHER”尚未定义。问题可以理解为:我们需要做什么才能使以下文件产生所需的行为?

\documentclass{minimal}
\begin{document}

apples apples apples apples
apples apples apples apples
apples apples apples apples 

\begin{KEEP TOGETHER}
    Banana tincidunt ante banana.
\end{KEEP TOGETHER}

cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe.

\end{document}

假设这是被和STRYNG包围的文本块。我们希望有以下行为:\begin{KEEP TOGETHER}\end{KEEP TOGETHER}

SPACER = four character indent based on
         current font size and other settings.

if (STRYNG will fit on what remains
               of the current line) { 
    WILL_FIT_HERE = true;
}
if (STRYNG will fit on an almost empty
    blank line, SPACER at the beginning) {
    WILL_FIT_NEXT = true;
}    
if [(not WILL_FIT_HERE) and (WILL_FIT_NEXT)] {
    print a line break
    print SPACER on the brand new empty line.
    print all of STRYNG after the indent
    print a line-break.
else {
    print STRYNG in the output document as if STRYNG
    were not inside of a "KEEP TOGETHER" block.

    Exhibit the same behavior as if the
    lines \begin{KEEP TOGETHER} and
    \end{KEEP TOGETHER} were commented out.

    This probably means that STRYNG (or at least
    the beginning of string) will be printed on
    the current line.
}

类似但不同的 Stack Exchange 问题

问题 1

有一个问题这与当前问题表达了同样的情感,但问题太模糊了。不清楚想要什么。有些人将这个问题解释为“我们如何才能避免单词中间出现换行符?”他们认为将字符串的一半放在当前行,将另一半放在下一行是可以的。还有其他解释。

第二季度

提问者防止文本范围内换行对显示不包含空格字符的 URL 感兴趣。和我一样,他们希望在文本的最开头插入换行符,而不是在中间。但是,他们没有描述如果 URL 不能全部放在一行中,他们想要什么行为。在您正在阅读的问题中,我确实描述了在这种情况下需要什么行为。此外,对于其他询问者,也许 LaTeX 在到达右边界之前就将换行符插入 URL 中。也许他们希望 URL 中的字符一直运行到右边界,然后才插入换行符,而不是在此之前。我不确定他们想要什么。

第三季度

问题如何进行条件换行是关于\\在没有后续文本的行上使用 LaTeX 代码:

blah blah \\ % no error
\\           % Error. no text proceeds `\\`

不可接受的解决方案

不可接受:总是在开头处换行

如果上面一行有足够的空间来容纳您想要保留的文本,那么总是插入换行符会显得很奇怪。

不可接受:不间断空格 ( ~)

Cras~mattis~tincidunt~ante出于一些原因,像这样的写法是不行的。首先,~必须在任何地方插入,这很麻烦。其次,要“保持在一起”的字符串可能不包含任何空格字符,无法全部放在当前行中,但可以单独放在新行中。我们想要类似于的东西\begin{command}{BLOCK OF TEXT}\end{command}

不可接受:\nolinebreak

\nolinebreak只在放置它的地方起作用一次,之后就不再起作用。插入\nolinebreak十几个不同的地方会使源代码不可读。这个问题类似于使用~

答案1

在此处输入图片描述

可能满足你的需要

\documentclass{minimal}
\newcommand\zz[1]{\leavevmode
\hskip 0pt plus 1fill\penalty0 \hskip 0pt plus -1fill
\sbox0{#1}\ifdim\wd0>\linewidth\unhbox0\else\usebox0\fi\relax
}

\begin{document}

apples apples apples apples
apples apples apples apples
apples apples apples apples 
appples apples appples apples
appples apples
\zz{Banana tincidunt ante banana.}
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe.

apples apples apples apples
apples apples apples apples
apples apples 
appples apples
\zz{Banana tincidunt ante banana.}
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe.

apples apples apples apples
apples apples apples apples
apples apples apples apples 
appples apples
\zz{Banana tincidunt ante banana.
Banana tincidunt ante banana.
Banana tincidunt ante banana.
Banana tincidunt ante banana.}
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe cantaloupe
cantaloupe cantaloupe.

\end{document}

相关内容