Латекс: как поместить разрыв строки в математике
Я хотел бы выразить следующее предложение (source_location также выделен курсивом, он не отображается правильно):
Каждая запись имеет список кортежей: < source_location, R/W, trip_counter, появление, убито (объяснено в дальнейшем) >
Мое текущее обходное решение для этого:
$ \left\langle
\textit{source\_location}, \textit{R/W}, \textit{trip\_counter},
\textit{occurrence}, \textit{killed} \text{(explained in the later)}
\right\rangle $
Я использую двухколоночную бумагу. Этот <.. > слишком длинный, но нет разрыва строки, потому что это математика. Как автоматически (или вручную) поместить разрыв строки в таком случае? Кажется, что \left\langle
и \right\rangle
должны быть в одной математике. Таким образом, трудно разбить несколько математических вычислений.
$<$
и $>$
будут альтернативой, но мне это не нравится.
Спасибо!
Ответы
Ответ 1
Почему бы не определить новую команду:
\newcommand{\tuple}[5]{$\langle$\textit{#1}, \textit{#2}, \textit{#3}, \textit{#4},
\textit{#5} (explained in the latter)$\rangle$}
Затем используйте \tuple{sourcelocation}{R/W}{tripcounter}{occurrence}{killed}
Ответ 2
LaTeX действительно позволяет встроенным математикам разбивать строки по умолчанию, но существует ряд ограничений. В частности, в вашем случае использование \left...\right
помещает все внутри неперерывной математической группы, поэтому первый шаг - заменить их просто простым \langle...\rangle
или, возможно, \bigl\langle...\bigr\rangle
.
Однако этого все еще недостаточно, чтобы разрешить линейную обработку; обычно это допускается только после отношений или операторов, а не знаков препинания, таких как запятая. (Я думаю, что это то, что происходит в любом случае, я не остановился, чтобы посмотреть это.) Таким образом, вы хотите указать, где возможны допустимые разрывы строк, написав \linebreak[1]
после каждой запятой.
В зависимости от того, как часто вы должны это делать, может быть предпочтительнее написать команду, чтобы обернуть ваши "кортежи" в приятную команду. Чтобы написать это в своем источнике:
$ \mytuple{ source\_location, R/W, trip\_counter, occurrence,
killed\upshape (explained in the later) } $
здесь определение \mytuple
, которое учитывает все сказанное выше:
\makeatletter
\newcommand\mytuple[1]{%
\@tempcnta=0
\bigl\langle
\@for\@ii:=#1\do{%
\@insertbreakingcomma
\textit{\@ii}
}%
\bigr\rangle
}
\def\@insertbreakingcomma{%
\ifnum \@tempcnta = 0 \else\,,\ \linebreak[1] \fi
\advance\@tempcnta\@ne
}
\makeatother
Ответ 3
Кажется, существует пакет, который решает эту проблему, называемую breqn
. Вы можете попробовать это и сообщить нам (я не использовал это).
Ответ 4
Я бы использовал среду align * из AMSmath. Кроме того, вы можете просто добавить "\", чтобы сломать линии? Должен работать и в среде математики. В качестве альтернативы вы можете отделить уравнения.
Ответ 5
Используйте\linebreak внутри математического выражения везде, где вы хотите, чтобы новая строка находилась даже между двумя скобками. Это приведет к нарушению строкой.