Латекс:Избегать нового абзаца?
Вопрос
Я использую \todo
команда от \todonotes
посылка.Я бы хотел расположить свой исходный код так, чтобы поместить \todos
отдельно от предыдущего абзаца:
Some text.
\todo{make note}
Но я не хочу \todo
чтобы начать новый абзац, иначе это приведет к увеличению интервала в документе.
Есть ли команда, чтобы избежать этого?
Если бы существовала команда / пакет для использования пробела до нее, тогда я мог бы переопределить \todo
чтобы использовать его.
Редактировать: Добавление % между всем, очевидно, очень раздражает.Что-нибудь еще?
Решение
Я должен согласиться со всеми остальными, что вам, вероятно, следует просто добавить %
, но я действительно нахожу этот вопрос интересным.Проблема в том, что как только 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 (как показано выше), чтобы автоматически размещать \gobblepars
после этого.
Чтобы справиться с ведущий пустое пространство.вы можете использовать \gobblepars
тоже, но вы должны быть откровенны.Например:
Some text\gobblepars
\todo{Stuff}
предотвратит появление символа \par между двумя строками.
Попробуй это:
Some text. % \todo{make note}
возможно, вам не следует оставлять новую строку между текстом и заметкой о задаче или просто комментировать ее
Some text.
%
\todo{make note}
Как насчет
Some text.
%
\todo{make note}
%
some more text
Установить \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) это работает нормально, не приводит к разрыву строки и помещает примечание о задаче на полях...