11

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

Some text.

\todo{make note}

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

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

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

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

4

8 回答 8

12

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

一些文字。{\let\par\relax

\todo{记笔记}}

但要小心!您绝对不想全局更改 的行为\par,这就是为什么我添加了一对额外的花括号(LaTeX 命令是作用域的,因此新的定义\par仅在进行定义的组内生效)。祝你好运。

于 2009-08-21T16:10:38.703 回答
10

当宏位于不需要的空格之前时,如果使用 \@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其后放置 a。

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

Some text\gobblepars

\todo{Stuff}

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

于 2011-08-24T03:54:42.373 回答
4

试试这个:

一些文字。
%
\todo{记笔记}
于 2009-08-21T13:38:48.357 回答
3

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

Some text.
%
\todo{make note}
于 2009-08-21T13:39:50.493 回答
2

怎么样

Some text.
%
\todo{make note}
%
some more text
于 2009-08-21T13:39:18.683 回答
2

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

于 2009-09-14T18:23:08.453 回答
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,并且

在输出中。

于 2011-01-31T05:39:46.567 回答
0

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

blah blah blah text \todo{现在就这样做!} 更多文字 blah blah blah。

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

于 2009-08-21T17:18:12.980 回答