LaTeX: избежать нового абзаца?

Я использую с todonotes пакета. Я хотел бы макет моего источника, чтобы положить todos отдельно от предыдущего пункта:

Some text.

todo{make note}

но я не хочу!--1--> чтобы начать новый абзац, или он закручивает интервал документа.

есть ли команда, чтобы избежать этого?

если бы была команда / пакет, чтобы потреблять пробелы до него, то я мог бы переопределить todo использовать его.

Edit: Добавление % между всем, очевидно, очень раздражает. Что-нибудь еще?

8 ответов


Я должен согласиться со всеми остальными, что вы, вероятно, следует просто добавить %, но я нахожу этот вопрос интересным. Проблема в том, что как только LaTeX читает пустую строку, она преобразуется в \par команда, которая завершает предыдущий абзац. В начале \todo, что \par команда уже выполнена, и ее невозможно отменить (я думаю). Так что ваша единственная надежда-сохранить это \par от вставки или от поведения, как обычно. Если вы хотите предотвратить его вставку, вы можете попробовать прочитать Главу 8 "The TeXbook", которая должна рассказать вам, как пустая строка преобразуется в \par. Кроме того, вы можете попробовать сделать решение, основанное на следующей идее:

Some text.{\let\par\relax

\todo{make note}}

но берегись! Вы определенно не хотите изменить поведение \par, поэтому я добавил дополнительную пару фигурных скобок (команды LaTeX ограничены, поэтому новое определение \par только вступает в силу в рамках группы, в которой было сделано определение). Удача.


когда макрос предшествует нежелательному пространству, % не требуется, если вы используете \@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). Вы также можете повторно определить todo (как показано выше), чтобы автоматически разместить \gobblepars после него.

обработки ведущий пустое пространство. вы можете использовать \gobblepars тоже, но вы должны быть ясны. Например:

Some text\gobblepars

\todo{Stuff}

предотвратит появление \par между двумя строками.


попробуйте это:

Some text.
%
\todo{make note}

как о

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

может быть, вы не должны оставлять новую строку между текстом и заметкой todo или просто комментировать ее

Some text.
%
\todo{make note}

Set \endlinechar=-1 чтобы пустые строки не имеют никакого эффекта. Вам нужно будет использовать \par для разделения абзацев, что, я думаю, является большим раздражением, чем необходимость печатать % на разделительных линиях, но это то, что вы просите.


Как насчет сохранения всего, что еще осталось сделать внутри тегов \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 как в источнике буквально, так и

в выходной.


просто включите \todo прямо в середине текста. ни разрыва линии, ничего.

бла-бла-бла текст \todo{сделайте это сейчас!} больше текста бла-бла-бла.

на моем компьютере (win xp, miktex 2.7, texniccenter) это работает нормально, не производит разрыва строки и помещает заметку todo на полях. . .