LaTeX: избегать нового абзаца? - PullRequest
9 голосов
/ 21 августа 2009

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

Some text.

\todo{make note}

Но я не хочу, чтобы \todo начинал новый абзац, или он испортил пробел в документе.

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

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

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

Ответы [ 8 ]

9 голосов
/ 24 августа 2011

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

9 голосов
/ 21 августа 2009

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

Some text.{\let\par\relax

\todo{make note}}

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

4 голосов
/ 21 августа 2009

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

Some text.
%
\todo{make note}
3 голосов
/ 21 августа 2009

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

Some text.
%
\todo{make note}
2 голосов
/ 14 сентября 2009

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

2 голосов
/ 21 августа 2009

Как насчет

Some text.
%
\todo{make note}
%
some more text
1 голос
/ 31 января 2011

Как насчет того, чтобы оставить все, что еще осталось, для выполнения внутри тегов \ def, а затем удалить его и переместить в нужный документ, когда больше нет работы?

* 1003 Е.Г. *

\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 буквально в источнике и

на выходе.

0 голосов
/ 21 августа 2009

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

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

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

...