Латекс: как поместить разрыв строки в математике

Я хотел бы выразить следующее предложение (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

Ответ 4

Я бы использовал среду align * из AMSmath. Кроме того, вы можете просто добавить "\", чтобы сломать линии? Должен работать и в среде математики. В качестве альтернативы вы можете отделить уравнения.

Ответ 5

Используйте\linebreak внутри математического выражения везде, где вы хотите, чтобы новая строка находилась даже между двумя скобками. Это приведет к нарушению строкой.