乳胶:避免新的段落?

Pau*_*gar 9 layout latex spacing paragraph

我使用包中的\todo命令\todonotes.我想将我的源布局\todos与前一段分开放置:

Some text.

\todo{make note}
Run Code Online (Sandbox Code Playgroud)

但我不想\todo开始新的段落,或者它会弄乱文档的间距.

是否有命令要避免这种情况?

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

编辑:在所有内容之间添加%显然非常烦人.还要别的吗?

Ant*_*nko 9

我必须同意其他人你应该添加的内容%,但我觉得这个问题很有意思.问题是,只要LaTeX读取空行,它就会转换为\par命令,结束前一段.在开始时\todo,该\par命令已被执行,并且无法撤消它(我认为).所以你唯一的希望就是不要\par插入或者像通常那样表现.如果你想阻止它被插入,你可以尝试阅读"The TeXbook"的第8章,它应该告诉你如何转换空行\par.或者,您可以尝试根据以下类型的想法制定解决方案:

Some text.{\let\par\relax

\todo{make note}}

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


Ted*_*lic 9

当宏在不需要的空间之前时,如果您使用\ @ifnextchar和\ @gobble,则不需要%.

考虑类似的事情(当然在序言中):

\makeatletter
\let\oldtodo\todo
\renewcommand\todo[1]{%
\oldtodo{#1}%
\@ifnextchar\par{\@gobble}{}}
\makeatother
Run Code Online (Sandbox Code Playgroud)

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

\todo{Stuff}

Things
Run Code Online (Sandbox Code Playgroud)

它的行为与...相同

\todo{Stuff}
%
Things
Run Code Online (Sandbox Code Playgroud)

要么

\todo{Stuff}
Things
Run Code Online (Sandbox Code Playgroud)

你可以用宏来概括这类事情

\makeatletter
\newcommand\gobblepars{%
    \@ifnextchar\par%
        {\expandafter\gobblepars\@gobble}%
        {}}
\makeatother
Run Code Online (Sandbox Code Playgroud)

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

处理领先的空白空间.你也可以使用\gobblepars,但你必须明确.例如:

Some text\gobblepars

\todo{Stuff}
Run Code Online (Sandbox Code Playgroud)

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