【问题标题】:LaTeX: Avoid new paragraph?LaTeX:避免新段落?
【发布时间】:2010-11-21 16:06:02
【问题描述】:

我使用来自\todonotes 包的\todo 命令。我想将我的源代码布局为将\todos 与上一段分开放置:

Some text.

\todo{make note}

但我不希望\todo 开始一个新段落,否则它会搞砸文档的间距。

有没有避免这种情况的命令?

如果有一个命令/包可以消耗空格,那么我可以重新定义 \todo 来使用它。

编辑: 在所有内容之间添加 % 显然非常令人讨厌。还有什么?

【问题讨论】:

  • 每个\todo 添加一个字符不是我们能得到的最不刺激的解决方案吗?
  • voyager:不,我不想添加任何字符。我们能做的最好的事情是有一个命令(比如 \consume)消耗通向它的空格,这样我就可以重新定义 \todo 以使用 \consume。
  • 有 \unskip 删除最后一个水平空格,但段落分隔符是完全不同的故事。

标签: layout latex spacing paragraph


【解决方案1】:

如何将所有仍有工作要做的内容保留在 \def 标记中,然后在没有更多工作要做时将其删除并正确移动到文档中?

例如

\def \par1
{
It was the best of times, it was the
}

\def \par2000
{
"Repression is the only lasting philosophy. The dark deference of fear and slavery, my friend," observed the Marquis
}

\def \paridunno
{
The end
}

查尔斯狄更斯的两个城市的故事

\par1
\todo{write a whole bunch of pages}
\par2000
\todo{Visit ghost of Christmas future, copy pages from finished book}
\paridunno
\todo{Think of a better ending}

这有一个额外的好处,即在源代码中为您提供 \listoftodos,并且

在输出中。

【讨论】:

    【解决方案2】:

    当宏位于不需要的空格之前时,如果使用 \@ifnextchar 和 \@gobble,则不需要 %。

    考虑类似(当然是在序言中):

    \makeatletter
    \let\oldtodo\todo
    \renewcommand\todo[1]{%
    \oldtodo{#1}%
    \@ifnextchar\par{\@gobble}{}}
    \makeatother
    

    这样,如果你有类似的东西:

    \todo{Stuff}
    
    Things
    

    它的作用与

    相同
    \todo{Stuff}
    %
    Things
    

    \todo{Stuff}
    Things
    

    你可以用一个宏来概括这些东西

    \makeatletter
    \newcommand\gobblepars{%
        \@ifnextchar\par%
            {\expandafter\gobblepars\@gobble}%
            {}}
    \makeatother
    

    然后你可以在任何你想吃空间的地方使用\gobblepars(比如在待办事项之后)。您还可以重新定义 todo(如上所示)以自动在其后放置一个\gobblepars

    处理前导空格。你也可以使用\gobblepars,但你必须明确。例如:

    Some text\gobblepars
    
    \todo{Stuff}
    

    将防止 \par 出现在两行之间。

    【讨论】:

      【解决方案3】:

      设置\endlinechar=-1 使空行无效。您将需要使用 \par 来分隔段落,我认为这比在分隔行上键入 % 更令人恼火,但这就是您所要求的。

      【讨论】:

      • 我真正想要的是能够说“最后一个空白行没有效果。但是非常有趣,谢谢。
      • 我认为这并不容易。当 TeX 已经将最后一个空白行作为段落分隔符时,它已经完成了前一段并将其添加到页面的框列表中,并且可能确定页面已满并调用页面的输出例程。鉴于 TeX 向导可以做到的技巧,我不敢说撤消这是一个不可能的请求,但我确实认为您需要找到非常熟悉 TeX 的人来帮助您。
      【解决方案4】:

      只需在文本中间包含您的 \todo 即可。没有换行符,什么都没有。

      blah blah blah text \todo{现在就这样做!} more text blah blah blah。

      在我的电脑(win xp、miktex 2.7、texniccenter)上,这项工作正常,不会产生换行符,并将待办事项注释放在边缘。 . .

      【讨论】:

      • 我认为最初的提问者确实想让\todo来源中具有视觉上的独特性。
      • 将说明符添加到 todo 包中,例如 \todo[inline]{to do text} 它在边距中添加 to do 并用一条线将其连接到文本...如果您使用[inline] 选项它将占用整行并将背景颜色默认设置为橙色。
      【解决方案5】:

      我必须同意其他所有人的观点,您可能应该添加%,但我确实觉得这个问题很有趣。问题是,LaTeX 读取空行后,立即转换为 \par 命令,从而结束上一段。在\todo的开头,那个\par命令已经被执行了,无法撤销(我认为)。所以你唯一的希望是防止\par 被插入或表现得像往常一样。如果你想阻止它被插入,你可以尝试阅读“The TeXbook”的第 8 章,它应该告诉你如何将空行转换为 \par。或者,您可以尝试根据以下想法制定解决方案:

      一些文字。{\let\par\relax \todo{记笔记}}

      但要小心!你绝对不想全局改变\par的行为,这就是为什么我添加了一对额外的花括号(LaTeX命令是作用域的,所以\par的新定义只需要在作出定义的组内产生影响)。祝你好运。

      【讨论】:

        【解决方案6】:

        也许你不应该在文本和待办事项之间留下新的一行,或者只是评论它

        Some text.
        %
        \todo{make note}
        

        【讨论】:

        • 在所有内容之间添加一个 % 显然是非常烦人的。还有什么?
        • 不确定这是否可行,但如果您想在文本和注释之间留下新行,您可以尝试在 todo 命令 \b\todo{make note} 前面添加一个退格字符
        • 完全省略空行?乳胶开始新段落的唯一方法是空行
        • 好吧,提问者似乎想避免在输出中出现新行,但将它们留在源代码中(可能是出于可读性原因)
        • 为什么不缩进 \todo 而不是留下空白行?这至少应该是可读的。
        【解决方案7】:

        怎么样

        Some text.
        %
        \todo{make note}
        %
        some more text
        

        【讨论】:

        • 在所有内容之间添加一个 % 显然很烦人。还有什么?
        • 我一定有问题,因为我从 1993 年开始就一直在这样做,每当我想在段落中间留出一些空间而不用 LaTeX 创建段落时。我从来没有动力去想是否有任何其他方法可以做到这一点。
        • @Sinan Ünür:很明显,你缺少一个重要的项目可以拖延;)
        【解决方案8】:

        试试这个:

        一些文字。 % \todo{记笔记}

        【讨论】:

        • 在所有内容之间添加一个 % 显然是非常烦人的。还有什么?
        • @Paul Biggar 显然,你和我有不同的容忍度。 ;-)
        • @Sinan Ünür:嗯,我必须在任何地方都这样做。这就是为什么我要求一个命令来消耗空格。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2011-01-04
        • 2010-10-07
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多