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 между двумя строками.
может быть, вы не должны оставлять новую строку между текстом и заметкой 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 на полях. . .