Problem mit mehrspaltiger Tabelle

Problem mit mehrspaltiger Tabelle

Was ist der beste Weg, eine solche Tabelle in LaTeX zu erhalten?

Bildbeschreibung hier eingeben

Antwort1

Mit {NiceArray}von nicematrix.

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

$\begin{NiceArray}{c|c|c|c}
\Block{1-2}{\scriptstyle S}& \Block{1-2}{\scriptstyle S} & \Block{1-2}{\scriptstyle S} & \\
\hline
1 & 2 & \hphantom{1} & 1 \\
\hline
2 &   & &   \\
\hline
\end{NiceArray}$

\end{document}

Ausgabe des ersten Codes

Wenn Ihre Spalten nicht die gleiche Breite haben, können Sie sie Smithilfe von Tikz (und den von erstellten PGF/Tikz-Knoten nicematrix) über die vertikalen Linien setzen.

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

$\begin{NiceArray}{c|c|c|c}
  \hline
  1 & 2 & 123478 & 1 \\
  \hline
  2 &   & &   \\
  \hline
\CodeAfter
  \tikz \foreach \i in {2,3,4} \node at (1-|\i) [above] { $\scriptstyle S$ } ; 
\end{NiceArray}$

\end{document}

Ausgabe des zweiten Codes

Antwort2

Mit tabularray:

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}
\newlength{\mylen}
\settowidth{\mylen}{2}
\newsavebox{\mysep}
\sbox{\mysep}{\scriptsize\bfseries\textit{S}}

\begin{document}
    \begin{tblr}{
        columns={wd=\mylen},
        cells={c,m},
        hline{2-Z}={leftpos=-1, rightpos=-1, endpos},
        vline{2-Y}={2-Z}{},
        vline{2-4}={1}{text=\clap{\usebox{\mysep}}},
        }
        &&&\\
        1&2&&1\\
        2&&&2\\
    \end{tblr}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Hier ist ein Hack, der zwei Tabellen verwendet.

Code

\documentclass{article}

\usepackage{tabularx}
\newcolumntype{C}[1]{>{\hspace{0pt}\centering\arraybackslash}p{#1}}

\begin{document}

\noindent
\begin{tabular}{ C{1mm} *{3}{C{4mm}}}
    & S & S & S
\end{tabular}

\noindent
\renewcommand{\arraystretch}{2}
\begin{tabular}{ C{4mm} *{3}{|C{4mm}} }
    \hline
    1 & 2 &   & 1\\ \hline
    2 &   &   & 2\\ \hline
\end{tabular}

\end{document}

Ergebnis

Bildbeschreibung hier eingeben

Antwort4

In tabularähnlichen Umgebungen ist es möglich, Texte als Spaltentrenner zwischen Spaltentypen einzufügen @{}. Andererseits \multicolumnkann ein Spaltentyp für eine Zelle an Ort und Stelle neu definiert werden. In Ihrem Fall müssen Sie daher nur eine Makrokette \multicolumn{1}{c@{\clap{$S$}}}in der ersten Zeile hinzufügen \clap– erstellt ein Feld mit der Breite Null, da sonst Sder Abstand zwischen den Zellen beeinträchtigt würde.

Um sicherzustellen, dass alle Zellen die gleiche Breite haben, definiere ich benutzerdefinierte Spaltentypen: L, Cund R. Aber das brauchen Sie vielleicht nicht unbedingt.

\documentclass{article}
\usepackage{array}
\newcolumntype{C}{>{\centering\arraybackslash}p{0.35cm}}
\newcolumntype{L}{>{\raggedright\arraybackslash}p{0.35cm}}
\newcolumntype{R}{>{\raggedleft\arraybackslash}p{0.35cm}}

\newcommand\mc{\multicolumn{1}{c@{\clap{$S$}}}{}}


\begin{document}
\begin{table}
  \centering
  \begin{tabular}{@{} L *2{|C} | R @{}}
    \mc & \mc & \mc & \\
    \hline
    1 & 2 & & 1 \\
    \hline
    2 &   & & 2 \\
    \hline
  \end{tabular}
\end{table}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen