alinhamento vertical de uma imagem tkz em uma célula longtable

alinhamento vertical de uma imagem tkz em uma célula longtable

Estou lutando para obter um centro vertical tkzpicture ou alinhamento superior em uma célula longa com o texto. De alguma forma, ele se alinha na linha de base inferior:

imagem mostrando imagem alinhada ao topo; não centralizar

Estou tentando fazer com que todos se alinhem.

Exemplo simplificado abaixo.

\documentclass{report}

\usepackage{tikz}
\usepackage{longtable}

\begin{document}

% define a square with text
\def\sqs{2.6cm}
\newcommand{\square}[3]{\node[inner sep=5pt, outer sep=5pt, minimum height=\sqs,minimum width=\sqs,fill=#3,draw,label={[align=center]center:#2}] at (#1){};}

\newcommand{\someset}[4]{
    \begin{tikzpicture}[baseline=(current bounding box.center)]
        \square{0,3}{A}{#1};
        \square{3,3}{B}{#2};
        \square{0,0}{C}{#3};
        \square{3,0}{D}{#4};
    \end{tikzpicture}
}
% Smaller version to use in tables.
\newcommand{\smallset}[4]{\resizebox{2.3cm}{1cm}{\someset{#1}{#2}{#3}{#4}}}

\begin{longtable}[t]{|p{2cm}||p{3cm}|p{2cm}|}
\hline 
foo & \smallset{red}{green}{green}{red} & some long text that will be on many lines and so on some long text that will be on many lines and so on  \\
\hline
foo & \smallset{red}{green}{green}{red} & boo \\
\hline
\end{longtable}
\end{document}

Definir baseline=(current bounding box.center)como baseline=(current bounding box.north)produz uma divisão por zero. Colocá-lo no centro não parece centralizá-lo com o texto.

A saída desejada é texto e tkzpicture, todos alinhados na parte superior.

Responder1

Isso coloca a linha de base corretamente para \somesete \smallset.

\documentclass{report}

\usepackage{tikz}
\usepackage{longtable}

\begin{document}

% define a square with text
\def\sqs{2.6cm}
\newcommand{\square}[3]{\node[inner sep=5pt, outer sep=5pt, minimum height=\sqs,minimum width=\sqs,fill=#3,draw,label={[align=center]center:#2}] at (#1){};}

\newcommand{\someset}[4]{
    \begin{tikzpicture}[baseline=(BASE)]
        \square{0,3}{A}{#1};
        \square{3,3}{B}{#2};
        \square{0,0}{C}{#3};
        \square{3,0}{D}{#4};
      \path (current bounding box.north) ++(0pt,-\ht\strutbox) coordinate (BASE);
    \end{tikzpicture}
}
% Smaller version to use in tables.
\newcommand{\smallset}[4]{\raisebox{\dimexpr \ht\strutbox-\height}% set baseline
  {\resizebox{2.3cm}{2cm}%
    {\raisebox{\depth}% make height total height
      {\someset{#1}{#2}{#3}{#4}}}}}

\begin{longtable}{|p{2cm}||p{3cm}|p{2cm}|}
\hline 
foo & \smallset{red}{green}{green}{red} & some long text that will be on many lines and so on some long text that will be on many lines and so on  \\
\hline
foo & \smallset{red}{green}{green}{red} & boo \\
\hline
\end{longtable}
\end{document}

informação relacionada