Matrizen in Latex

Matrizen in Latex

Ich versuche, mit der folgenden Auszeichnung eine Matrix zu erstellen:

\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}

Die Ausgabe, die ich erhalte, ist wie folgt:

Bildbeschreibung hier eingeben

Wie Sie sehen, sind die Spalten der Matrix ungleichmäßig verteilt. Es wäre toll, wenn ich gleichmäßig verteilte Spalten bekommen könnte.

Irgendwelche Ideen?

Antwort1

Achtung: Ich bin kein blkarrayExperte ;-)

Es ist jedoch möglich, einen neuen Spaltentyp (z. B. B) zu definieren, blockarrayder mit diesem Spezifizierer für alle Spalten die gleiche Breite verwendet.

Da es bei dieser Funktion 7 Spalten gibt, könnte man sie kürzen cccccccund durch ersetzen, *{7}Bwie in üblichen Tabellenumgebungen.

Ich muss herausfinden, ob \BAnewcolumntypeder Spaltentyp mit einem Argument unterstützt wird.

\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}

Bildbeschreibung hier eingeben

Antwort2

Das tabstackenginePaket bietet eine Option für Arrays mit fester Breite, die ich hier verwende. Aus diesem Grund musste ich lediglich einen einzigen Eintrag des Arrays „1“ mit der gleichen Breite wie das Wort „reading“ erstellen, und der Rest war erledigt. Das habe ich mit erreicht \tmpbox.

Das Paket ermöglicht auch das Stapeln von Text oder Mathematik, was ich hier verwendet habe, um den Text als Text und die Zahlen als Mathematik zu stapeln.

\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}

Bildbeschreibung hier eingeben

Der Abstand zwischen den Spalten wird mit auf 1ex gesetzt \setstacktabbedgap{1ex}. Wenn der Abstand zwischen den Zeilen größer sein soll, \setstackgap{L}{1.2\baselineskip}kann die Zeile zur Präambel hinzugefügt werden, um das folgende Ergebnis zu erzielen:

Bildbeschreibung hier eingeben

Schließlich könnte man die rechte Spalte der Wörter linksbündig ausrichten, indem man ein [l]optionales Argument hinzufügt \Centerstack.

Antwort3

Eine Variante mit einer Spalte weniger und 7 Blöcken, mit \Right{.}{text}der Präambel jedes Blocks am Ende. Ich verwende das eqparboxPaket auch, um Spalten gleicher Breite sicherzustellen, ohne durch Ausprobieren herausfinden zu müssen, welche die richtige Größe ist:

\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} 

Bildbeschreibung hier eingeben

verwandte Informationen