
Попытка создать матрицу с использованием следующей разметки:
\begin{figure}
\centering
\[
\begin{blockarray}{cccccccc}
I & like & nlp & mlpr & enjoy & reading & books \\
\begin{block}{[ccccccc]c}
1 & 1 & 1 & 1 & 1 & 1 & 1 & I \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & like \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & nlp \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & mlpr \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & enjoy \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & reading \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & books \\
\end{block}
\end{blockarray}
\]
\caption{A caption to the entire figure}
\end{figure}
Вывод, который я получаю, следующий:
Как вы видите, столбцы матрицы расположены неравномерно. Было бы здорово, если бы я мог получить равномерно распределенные столбцы.
Есть идеи?
решение1
Предупреждение: я не blkarray
эксперт ;-)
Однако можно определить новый тип столбца (например, B), для blockarray
которого будет использоваться одинаковая ширина для всех столбцов с этим спецификатором.
Поскольку имеется 7 столбцов с этой функцией, можно сократить ccccccc
и заменить на *{7}B
, как в обычных табличных средах.
Мне нужно выяснить, \BAnewcolumntype
поддерживается ли тип столбца с аргументом.
\documentclass{article}
\usepackage{mathtools}
\usepackage{blkarray}
\BAnewcolumntype{B}{>{\centering}p{1cm}}
\begin{document}
\begin{figure}
\centering
$
\begin{blockarray}{cccccccc}
\text{I} & \text{like} & \text{nlp} & \text{mlpr} & \text{enjoy} & \text{reading} & \text{books} \\
\begin{block}{[*{7}B]c}
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{I} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{like} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{nlp} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{mlpr} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{enjoy} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{reading} \\
1 & 1 & 1 & 1 & 1 & 1 & 1 & \text{books} \\
\end{block}
\end{blockarray}
$
\caption{A caption to the entire figure}
\end{figure}
\end{document}
решение2
Пакет tabstackengine
имеет фиксированную ширину для массивов, которую я здесь и использую. Из-за этого мне просто нужно было сделать одну запись массива "1" той же ширины, что и слово "reading", а остальное было решено. Я сделал это с помощью \tmpbox
.
Пакет также позволяет объединять текст или математические выражения, что я и использовал здесь, чтобы объединить текст как текст, а числа как математические выражения.
\documentclass{article}
\usepackage{tabstackengine}
\setstackEOL{\cr}
\setstacktabbedgap{1ex}
\fixTABwidth{T}
\begin{document}
\begin{figure}
\centering
\[
\stackText
\setbox0=\hbox{reading}
\savestack{\tmpbox}{\makebox[\wd0]{$1$}}
\savestack{\toprow}{\tabbedCenterstack{I & like & nlp & mlpr & enjoy & reading & books}}
\ensurestackMath{
\stackon{\bracketMatrixstack{
\tmpbox & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1 \cr
1 & 1 & 1 & 1 & 1 & 1 & 1
}}{\toprow}}
\Centerstack{ I \cr like \cr nlp \cr mlpr \cr enjoy \cr reading \cr books}
\]
\caption{A caption to the entire figure}
\end{figure}
\end{document}
Промежуток между столбцами устанавливается равным 1ex с \setstacktabbedgap{1ex}
. Если бы кто-то хотел, чтобы проем между строками baselineskip был больше, строку \setstackgap{L}{1.2\baselineskip}
можно было бы добавить в преамбулу, чтобы получить следующий результат:
Наконец, можно выровнять правый столбец слов по левому краю, добавив [l]
необязательный аргумент к \Centerstack
.
решение3
Вариант с одним столбцом меньше и 7 блоками, с \Right{.}{text}
преамбулой в конце каждого блока. Я также использую пакет, eqparbox
чтобы обеспечить одинаковую ширину столбцов, без необходимости искать методом проб и ошибок, какой размер будет правильным:
\documentclass{article}
\usepackage{mathtools}
\usepackage{blkarray}
\usepackage{eqparbox}
\BAnewcolumntype{B}{>{\centering}p{1cm}}
\begin{document}
\begin{figure}
\centering\makeatletter\setlength\tabcolsep{-10pt}\BA@colsep =1pt\makeatother
$
\begin{blockarray}{*{7}{c}}
\eqmakebox[C]{I} & \eqmakebox[C]{like} & \eqmakebox[C]{nlp} & \eqmakebox[C]{mlpr} & \eqmakebox[C]{enjoy} & \eqmakebox[C]{reading} & \eqmakebox[C]{books} \\
\begin{block}{*{7}{c}\Right{.}{I}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{like}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{nlp}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{mlpr}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{enjoy}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{reading}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\begin{block}{*{7}{c}\Right{.}{books}}
1 & 1 & 1 & 1 & 1 & 1 & 1 \\
\end{block}
\end{blockarray}
$
\caption{A caption to the entire figure}
\end{figure}
\end{document}