![将 tikzpicture 对齐到表格内部还是外部?](https://linux22.com/image/460487/%E5%B0%86%20tikzpicture%20%E5%AF%B9%E9%BD%90%E5%88%B0%E8%A1%A8%E6%A0%BC%E5%86%85%E9%83%A8%E8%BF%98%E6%98%AF%E5%A4%96%E9%83%A8%EF%BC%9F.png)
抱歉,标题不对,我只是在寻找解决我所遇到的问题的方法。
我想生成一份基于多个事件的报告,其中一列显示发生的事件的图标,另一列显示详细信息。
从视觉上看,它目前看起来像这样:
如您所见,图标似乎与另一列的第二行对齐,虽然我希望它能占据整个高度,但它甚至可以拉伸它。另一种解决方案是将图标放在表格外面,然后重复该过程,但我还没有找到解决方案。
这是我当前的代码:
\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}