创建 3x3 大小的支付表

创建 3x3 大小的支付表

我试图使用网站上的另一个问题来构建一个 3x3 大小的表格来表示多人游戏中的收益。我以这个问题给出的答案为例使用 LaTeX 表格环境创建收益矩阵,但在尝试调整它时,有些东西不起作用。为了参考,我将放上我正在处理的代码。

\documentclass{article}
\usepackage{multirow,array}
\begin{document}
\begin{table}
    \centering 
    \setlength{\extrarowheight}{2pt}
    \begin{tabular}{cccc|c|c|c|}
        & \multicolumn{1}{c}{} & \multicolumn{2}{c}{} & \multicolumn{3}{c}{Player B}\\
        & \multicolumn{1}{c}{} & \multicolumn{1}{c}{$R$}  & \multicolumn{1}{c}{$P$} & \multicolumn{1}{c}{$S$} \\\cline{4-5}
        \multirow{3}*{Player A}  
        & $R$ & $(0,0)$ & $(-4,4)$ & $(4,-4)$ \\\cline{4-5}
        & $P$ & $(4,-4)$ & $(0,0)$ & $(-4,4)$ \\\cline{4-5}
        & $S$ & $(-4,4)$ & $(4,-4)$ & $(0,0)$ \\\cline{4-5}
    \end{tabular}
\end{table}
\end{document} 

这是我得到的输出,你知道为什么会这样吗?提前谢谢! 在此处输入图片描述

答案1

我会使用array环境而不是tabular环境;这样可以节省您输入大量$符号的时间。似乎不需要table环境“包装器”。最后,您的代码似乎定义了 7 列,但似乎只需要 5 列。

我假设RPS分别表示“石头”、“布”和“剪刀”。这样对吗? :-)

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage{array}      % for \extrarowheight macro
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro

\begin{document}
\[
\setlength{\extrarowheight}{2pt}
    \begin{array}{rr|c|c|c|}
        & \mc{}         & \multicolumn{3}{c}{\textup{Player $B$}} \\
        & \mc{}         & \mc{R} & \mc{P} & \mc{S} \\ \cline{3-5}
        & R             &  (0,0) & (-4,4) & (4,-4) \\ \cline{3-5}
        \textup{Player $A$}
        & P             & (4,-4) &  (0,0) & (-4,4) \\ \cline{3-5}
        & S             & (-4,4) & (4,-4) &  (0,0) \\ \cline{3-5}
    \end{array}
\]
\end{document}

答案2

您可以使用sgame我在https://tex.stackexchange.com/a/512953/4427,您还可以在其中找到其他示例(第二个版本,具有均衡的单元格)。

使用最新版本的 LaTeX,您无需加载xparse

\documentclass{article}
\usepackage{hhline,array,multirow}
\usepackage[table]{xcolor} % if you need to color cells

\newcommand\doubleactivetilde{~~} % hhline wants ~ to mean 'column with no line'

\ExplSyntaxOn

\seq_new:N \l_cfr_game_body_seq
\seq_new:N \l_cfr_game_first_seq
\tl_new:N \l_cfr_game_first_tl
\dim_new:N \l__cfr_game_dim
\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }

\cs_new_protected:Nn \__cfr_game_first:n
 {
  & \multicolumn{1}{c}{#1}
 }

\NewDocumentEnvironment{game}{mmooob}
 {% #1 = number of rows, #2 = number of columns (besides the label column)
  % #3 = left label, #4 = top label, #5 = bottom label
  % #6 = body

  % split the body at \\
  \seq_set_split:Nnn \l_cfr_game_body_seq { \\ } { #6 }
  % in case there's a trailing \\
  \seq_pop_right:NN \l_cfr_game_body_seq \l_tmpa_tl
  \tl_if_empty:NF \l_tmpa_tl { \seq_put_right:NV \l_cfr_game_body_seq \l_tmpa_tl }
  %
  \seq_pop_left:NN \l_cfr_game_body_seq \l_cfr_game_first_tl
  \seq_set_split:NnV \l_cfr_game_first_seq { & } \l_cfr_game_first_tl
  % discard the first (empty) item
  \seq_pop_left:NN \l_cfr_game_first_seq \l_tmpa_tl
  \__cfr_game_equalize_columns:
  \begin{tabular}{@{}c@{}r|*{#2}{w{c}{\l__cfr_game_dim}|}}
  % top label
  \IfValueT{#4}{\multicolumn{2}{@{}c}{} & \multicolumn{#2}{c}{#4} \\}
  % first row
  \multicolumn{2}{c}{} \seq_map_function:NN \l_cfr_game_first_seq \__cfr_game_first:n \\
  \exp_args:No \hhline{\doubleactivetilde*{#2}{|-}|}
  \IfValueTF{#3}{\multirow{#1}{*}{#3\quad}}{\multicolumn{1}{@{}c@{}}{}}
  & \seq_use:Nn \l_cfr_game_body_seq
   { \\ \exp_args:No \hhline{\doubleactivetilde*{#2}{|-}|} & } \\
  \exp_args:No \hhline{\doubleactivetilde*{#2}{|-}|}
  \IfValueT{#5}
   {
    \multicolumn{2}{c}{\rule{0pt}{1.25\normalbaselineskip}} &
    \multicolumn{#2}{c}{\makebox[0pt]{#5}} \\
   }
  \end{tabular}
}{}

\cs_new_protected:Nn \__cfr_game_equalize_columns:
 {
  \dim_zero:N \l__cfr_game_dim
  % measure the header cells
  \seq_map_function:NN \l_cfr_game_first_seq \__cfr_game_measure_cell:n
  % measure the cells in the body
  \seq_map_inline:Nn \l_cfr_game_body_seq
   {
    \__cfr_game_measure_columns:n { ##1 }
   }
 }
\cs_new_protected:Nn \__cfr_game_measure_columns:n
 {
  \seq_set_split:Nnn \l_tmpa_seq { & } { #1 }
  \seq_indexed_map_inline:Nn \l_tmpa_seq
   {
    \int_compare:nT { ##1 > 1 }
     {
      \__cfr_game_measure_cell:n { ##2 }
     }
   }
 }
\cs_new_protected:Nn \__cfr_game_measure_cell:n
 {
  \hbox_set:Nn \l_tmpa_box { #1 }
  \dim_set:Nn \l__cfr_game_dim { \dim_max:nn { \l__cfr_game_dim } { \box_wd:N \l_tmpa_box } }
 }
\ExplSyntaxOff

\begin{document}

\begin{game}{3}{3}[Player A][Player B]
    & $R$      & $P$      & $S$ \\
$R$ & $(0,0)$  & $(-4,4)$ & $(4,-4)$ \\
$P$ & $(4,-4)$ & $(0,0)$  & $(4,-4)$ \\
$S$ & $(-4,4)$ & $(4,-4)$ & $(0,0)$ \\
\end{game}

\end{document}

在此处输入图片描述

答案3

\documentclass{article}
\usepackage{multirow,array}
\begin{document}
\begin{table}
    \setlength{\extrarowheight}{2pt}
    \begin{tabular}{cc|c|c|c|}
        \multicolumn{2}{c}{} & \multicolumn{3}{c}{Player B}\\
        \multicolumn{2}{c}{} & \multicolumn{1}{c}{R} & \multicolumn{1}{c}{P} & \multicolumn{1}{c}{S}\\ \cline{3-5}
        \multirow{3}{*}{Player A} & R & (0,0) & (-4,4) & (4,-4)\\ \cline{3-5}
        & P & (4,-4) & (0,0) & (-4,4)\\ \cline{3-5}
        & S & (-4,4) & (4,-4) & (0,0)\\ \cline{3-5}
    \end{tabular}
\end{table}   
\end{document}

在此处输入图片描述

答案4

与。{NiceTabular}nicematrix

\documentclass{article}
\usepackage{nicematrix}     

\begin{document}

\begin{center}
\setlength{\extrarowheight}{2pt}
\begin{NiceTabular}{rrccc}
    &               & \Block{1-3}{Player $B$} \\
    &               &   R    & P      & S      \\ 
    & R             &  \Block[hvlines]{3-3}{}
                      $(0,0)$  & $(-4,4)$ & $(4,-4)$ \\ 
    Player $A$
    & P             & $(4,-4)$ &  $(0,0)$ & $(-4,4)$ \\ 
    & S             & $(-4,4)$ & $(4,-4)$ &  $(0,0)$ \\ 
\end{NiceTabular}
\end{center}

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容