Проблема с многостолбцовой таблицей

Проблема с многостолбцовой таблицей

Как лучше всего получить такую ​​таблицу в LaTeX?

введите описание изображения здесь

решение1

С {NiceArray}из 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}

Вывод первого кода

Если ваши столбцы имеют разную ширину, вы можете разместить Sнад ними вертикальные линии, используя Tikz (и узлы PGF/Tikz, созданные с помощью nicematrix).

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

Вывод второго кода

решение2

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

введите описание изображения здесь

решение3

Вот хакерский способ с использованием двух таблиц.

Код

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

Результат

введите описание изображения здесь

решение4

В tabular-подобных средах можно вставлять тексты как разделители столбцов через @{}типы столбцов. С другой стороны, \multicolumnможно переопределить тип столбца на месте для одной ячейки. Следовательно, в вашем случае вам просто нужно добавить цепочку макросов \multicolumn{1}{c@{\clap{$S$}}}в первую строку -- \clapсоздает блок нулевой ширины, в противном случае Sэто повлияет на пространство между ячейками.

Чтобы убедиться, что все ячейки имеют одинаковую ширину, я определяю пользовательские типы столбцов: L, Cи R. Но вам это может и не понадобиться.

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

введите описание изображения здесь

Связанный контент