使用 tikz 在表格内创建具有多行和多列的图表

使用 tikz 在表格内创建具有多行和多列的图表

我想复制表格(3 x 6),并且它应该足够大才能进入迷你页面。

documentclass{report}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usepackage{tabularx}


% New Commands
\newcommand{\sdgarr}[2]{
    \tikz \draw[-{Straight Barb[line width=.2cm,line join=round,line cap=round]},line width=.2cm,color=#2,line cap=round,rotate=#1-45] (0,0) - - (1,1);
}
\newcommand{\sdgcir}[1]{
    \tikz \draw[fill=#1,color=#1] (0,0) circle (5pt);
}


\begin{document}
\begin{tabularx}{0.95\linewidth}{|X|X|}
    \centering
\hline
1 NO \newline POVERTY \newline
\sdgarr{red}{45}
& 
2 ZERO  \newline Hunger \newline
\sdgcir{gray}
\\

\hline
\end{tabularx}


\end{document}

我问过类似的问题,但是我说得不够清楚。

使用 tikz 在表格内创建图表

在此处输入图片描述

答案1

编辑:

正如承诺的那样,我稍微改进了建议的解决方案:

  • 新的命令定义
  • 图像对齐
  • 我仍然需要在表格中写入正确的文本,以及在单元格中选择 OP 所需的图像(这现在应该不是什么大问题)

在此处输入图片描述

\documentclass[table]{report}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usepackage{makecell, multirow, tabularx}
\usepackage{graphicx}

% arrows
\newcommand{\rotarr}[2]{\centerline{
\tikz[baseline]{%
    \path[draw=#1,line width=3mm, line join=round,line cap=round,
         -{Straight Barb[scale=1.2, line join=round,line cap=round]},
         rotate around={#2:(0,0)}]  (-0.4\linewidth,0) -- (0.4\linewidth,0);}
               }}
% circle fill, meaning zero?
\newcommand{\zero}{\centerline{
\tikz[baseline]{\node[circle, fill=gray, minimum size=0.8\linewidth] {};}
                  }}
% columns headers                  
\newcommand{\cellhead}[2]{\smallskip\centerline{
    \begin{tabular}[t]{@{} >{\sffamily\bfseries}l @{\,}
                           >{\sffamily\bfseries}l
                       @{} }
    \multirow[b]{2}{*}{\scalebox{2.8}{#1}} &   {\makecell[lt]{#2}}
    \end{tabular}   }  }

\begin{document}
    \begin{center}
    \setlength\arrayrulewidth{1pt}
    \arrayrulecolor{cyan}
\begin{tabularx}{\linewidth}{|*{6}{X|}}
% first two-line row
   \hline
\cellhead{1}{NO\\POVERTY}
    &   \cellhead{2}{ZERO\\HUNGER}
        &   \cellhead{3}{WHAT\\EVER}
            &   \cellhead{4}{NO\\POVERTY}
                &   \cellhead{5}{ZERO\\HUNGER}\
                    &   \cellhead{6}{WHAT\\EVER\\NEWER}  \\
\rotarr{red}{45}
    &   \zero
        &   \rotarr{purple}{-90}
            &   \rotarr{orange}{0}
                &   \rotarr{teal}{90}
                    &   \rotarr{orange}{0}              \\
% second two-line row
    \hline
\cellhead{7}{NO\\POVERTY}
    &   \cellhead{8}{ZERO\\HUNGER}
        &   \cellhead{9}{WHAT\\EVER}
            &   \cellhead{10}{NO\\POVERTY}
                &   \cellhead{11}{ZERO\\HUNGER}\
                    &   \cellhead{12}{WHAT\\EVER\\NEWER}  \\
\rotarr{red}{45}
    &   \zero
        &   \rotarr{purple}{-90}
            &   \rotarr{orange}{0}
                &   \rotarr{teal}{90}
                    &   \rotarr{orange}{0}              \\
    \hline
\end{tabularx}
    \end{center}
\end{document}
  • 不清楚你所说的“相当大的”是什么意思:
    • 必须手动设置表格中使用的字体大小,以使文本不会超出单元格
    • 图像的大小现在由单元格宽度决定,因此它们的大小将始终适应单元格的宽度
  • 图像按需要对齐后,现在它们被设置在单独的行中。到目前为止,这是我能够实现此目的的唯一方法。

相关内容