将 tikzpicture 对齐到表格内部还是外部?

将 tikzpicture 对齐到表格内部还是外部?

抱歉,标题不对,我只是在寻找解决我所遇到的问题的方法。

我想生成一份基于多个事件的报告,其中一列显示发生的事件的图标,另一列显示详细信息。

从视觉上看,它目前看起来像这样:

当前结果

如您所见,图标似乎与另一列的第二行对齐,虽然我希望它能占据整个高度,但它甚至可以拉伸它。另一种解决方案是将图标放在表格外面,然后重复该过程,但我还没有找到解决方案。

这是我当前的代码:

\documentclass[15pt]{article}
\usepackage{tikz}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=\dimexpr15mm+1.5\baselineskip,bottom=2cm]{geometry}

\renewcommand{\familydefault}{\sfdefault}

\newcommand{\icon}[1]{
    \begin{tikzpicture}
        \begin{scope}
            \clip (0,0) circle (1cm);
            \node at (0,0) {\includegraphics[width=.5cm]{#1}};
        \end{scope}
        \draw[black] (0,0) circle (.5cm); 
    \end{tikzpicture}
}

\begin{document}

\begin{table}[]
    \begin{tabular}{|l|l|}
    \hline
    \multirow{2}{*}{\icon{example-image-a}} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & Début d'intervention sur le site "Eglise St Martin" \\ \hline
    \multirow{2}{*}{\icon{example-image-b}} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & L'utilisateur pre sdis a rejoint le site. \\ \hline
    \multirow{2}{*}{\icon{example-image-c}} & 01/01/2023 à 00:05 \\ \cline{2-2} 
     & "Statue Marie" a reçu le statut "En cours de protection" \\ \hline
    \end{tabular}
\end{table}

\end{document}

我怎么解决这个问题?

先感谢您。

答案1

您可以使用以下选项更改 tikzpicture 的基线baseline=...

\documentclass[15pt]{article}
\usepackage{tikz}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=\dimexpr15mm+1.5\baselineskip,bottom=2cm]{geometry}

\renewcommand{\familydefault}{\sfdefault}

\newcommand{\icon}[1]{{
    \begin{tikzpicture}[baseline=1mm]
        \begin{scope}
            \clip (0,0) circle (0.35cm);
            \node (image) at (0,0) {\includegraphics[width=1cm]{#1}};
        \end{scope}
        \node[circle,draw,minimum width=0.7cm] (icon) at (0,0) {}; 
    \end{tikzpicture}
}}

\begin{document}

\begin{table}[]
    \begin{tabular}{|l|l|}
    \hline
    \multirow[t]{2}{*}{\icon{example-image-a}} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & Début d'intervention sur le site "Eglise St Martin" \\ \hline
    \multirow[t]{2}{*}{\icon{example-image-b}} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & L'utilisateur pre sdis a rejoint le site. \\ \hline
    \multirow[t]{2}{*}{\icon{example-image-c}} & 01/01/2023 à 00:05 \\ \cline{2-2} 
     & "Statue Marie" a reçu le statut "En cours de protection" \\ \hline
    \end{tabular}
\end{table}

\end{document}

在此处输入图片描述

或者,您可以使用该tabularray包并获得良好的开箱即用对齐效果:

\documentclass[15pt]{article}
\usepackage{tikz}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=\dimexpr15mm+1.5\baselineskip,bottom=2cm]{geometry}

\renewcommand{\familydefault}{\sfdefault}

\newcommand{\icon}[1]{{
    \begin{tikzpicture}
        \begin{scope}
            \clip (0,0) circle (0.35cm);
            \node (image) at (0,0) {\includegraphics[width=1cm]{#1}};
        \end{scope}
        \node[circle,draw,minimum width=0.7cm] (icon) at (0,0) {}; 
    \end{tikzpicture}
}}
\usepackage{tabularray}

\begin{document}

\begin{table}[]
    \begin{tblr}{|l|l|}
    \hline
    \SetCell[r=2]{} \icon{example-image-a} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & Début d'intervention sur le site "Eglise St Martin" \\ \hline
    \SetCell[r=2]{} \icon{example-image-b} & 01/01/2023 à 00:00 \\ \cline{2-2} 
     & L'utilisateur pre sdis a rejoint le site. \\ \hline
     \SetCell[r=2]{} \icon{example-image-c} & 01/01/2023 à 00:05 \\ \cline{2-2} 
     & "Statue Marie" a reçu le statut "En cours de protection" \\ \hline
    \end{tblr}
\end{table}

\end{document}

在此处输入图片描述

答案2

我添加了baseline将 tikz 图像的基线移动到其中间点。使用clip,似乎不会改变最小尺寸。出于这个原因,我添加了一个额外的不可见矩形来模拟图像周围的填充。

至于表格本身,我绝对建议tabularray使用这个例子,它均匀分布其内容。

\documentclass[14pt]{extarticle}
\usepackage{tikz}
    \usetikzlibrary{calc}
\usepackage{graphicx}
\usepackage{tabularray}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=\dimexpr15mm+1.5\baselineskip,bottom=2cm]{geometry}


\renewcommand{\familydefault}{\sfdefault}
\newcommand{\padding}{0.25cm,0.25cm}

\newcommand{\icon}[1]{%
  \begin{tikzpicture}[baseline]
    \begin{scope}
      \clip (0,0) circle (0.5cm);
      \node at (0,0) {\includegraphics[width=1.5cm]{#1}};
    \end{scope}
    \draw (0,0) circle (.5cm);
    \draw [draw=none]
    ($(current bounding box.south west) - (\padding)$)
    rectangle
    ($(current bounding box.north east) + (\padding)$);
  \end{tikzpicture}}

\begin{document}
\begin{table}[tbh]
  \centering
  \begin{tblr}{
      colspec={Q[c] Q[l]},
      column{1} = {colsep=0pt},
      vlines, hlines,
      vspan=even,
    }
    \SetCell[r=2]{} \icon{example-image-a}
    & 01/01/2023 à 00:00 \\
    & Début d'intervention sur le site "Eglise St Martin" \\
    \SetCell[r=2]{} \icon{example-image-b}
    & 01/01/2023 à 00:00 \\
    & L'utilisateur pre sdis a rejoint le site. \\
    \SetCell[r=2]{} \icon{example-image-c}
    & 01/01/2023 à 00:05 \\
    & "Statue Marie" a reçu le statut "En cours de protection" \\
  \end{tblr}
\end{table}
\end{document}

在此处输入图片描述

相关内容