Аннотирование таблиц

Аннотирование таблиц

Я пытаюсь аннотировать таблицу, выделяя и аннотируя последний столбец, но как только я использую совместное \tabnodeс раскрашиванием, я получаю смещение. Либо содержимое ячейки, помеченной с , \tabnodeсмещено за пределы таблицы, либо ячейка растянута по ширине (тогда как все ячейки должны быть одинаковой ширины). Как правильно это исправить? Вот пример кода, который я использую:

   \documentclass{beamer}
   \usepackage[beamer,customcolors]{hf-tikz}
   \usepackage{tabularx}
   \begin{document}

    \begin{frame}{Title}
    \newcounter{nodecount}
    \newcommand\tabnode[1]{\addtocounter{nodecount}{1}\tikz\node(\arabic{nodecount}){#1};}

     \tikzstyle{every picture}+=[remember picture,baseline]
     \tikzstyle{every node}+=[inner sep=0pt,anchor=base,
     minimum width=1.8cm,align=center,text depth=.25ex,outer sep=1.5pt]
     \tikzstyle{every path}+=[thick, rounded corners]


   \newcolumntype{g}{>{\columncolor{red}}c}
   \begin{table}[ht]
     \centering
     \begin{tabular}{|c|c|c|g|}\hline
      bla   &  bla  & bla   & \tabnode{$b_1$}& \hline
  bla   &  bla  & bla   & bla            & \hline       
  bla   &  bla  & bla   & bla            & \hline   
  bla   &  bla  & bla   & bla            & \hline
  bla   &  bla  & bla   & bla            & \hline       
  bla   &  bla  & bla   & bla            & \hline
     \end{tabular}
   \end{table}


   \begin{tikzpicture}[overlay]

    \node [right=2cm,above=2cm,minimum width=0pt] at (1) (A) {A};
    \draw [<-,out=5,in=180] (1) to (A);

   \end{tikzpicture}

   \end{frame}

решение1

В вашем коде есть некоторые ошибки, которые приведут к ошибкам (в частности, вы объявили четыре столбца, но использовали пять, и вы забыли команды изменения строк): ниже я исправил их и другие аспекты:

\documentclass{beamer}
\usepackage[beamer,customcolors]{hf-tikz}
\usepackage{tabularx}
\usepackage{colortbl}

\newcounter{nodecount}
\newcolumntype{g}{>{\columncolor{red}}c}

\newcommand\tabnode[1]{%
  \addtocounter{nodecount}{1}%
  \tikz[remember picture,overlay]\node[inner sep=0pt] (\thenodecount) {#1};}

\begin{document}

\begin{frame}{Title}

\tikzset{
every picture/.style={remember picture,baseline},
every node/.style={
  inner sep=0pt,
  anchor=base,
 minimum width=1.8cm,
 align=center,
 text depth=.25ex,
 outer sep=1.5pt},
every path/.style={
  thick, 
  rounded corners
  }
}  

\begin{table}
\centering
\begin{tabular}{|c|c|c|g|c|}
 \hline
  bla   &  bla  & bla   & \tabnode{$b_1$} \\ \hline
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline
 \end{tabular}
\end{table}
\begin{tikzpicture}[remember picture,overlay]
  \node [right=2cm,above=2cm,minimum width=0pt] at (1) (A) {A};
  \draw [<-,out=5,in=180] (1) to (A);
\end{tikzpicture}
\end{frame}

\end{document}

введите описание изображения здесь

Однако я хотел бы предложить вам другой подход с использованием библиотеки tikzmark: общая идея остается прежней; используя \tikzmark вы ставите «метку», как в , \tikzmark{a}а затем вы можете использовать эту метку, используя pic cs. как в \draw (pic cs:a) -- ++(1,0);. Полный пример:

\documentclass{beamer}
\usepackage[beamer,customcolors]{hf-tikz}
\usepackage{tabularx}
\usepackage{colortbl}
\usetikzlibrary{tikzmark}

\newcolumntype{g}{>{\columncolor{red}}c}

\begin{document}

\begin{frame}{Title}

\tikzset{
every picture/.style={remember picture,baseline},
every node/.style={
  inner sep=0pt,
  anchor=base,
 minimum width=1.8cm,
 align=center,
 text depth=.25ex,
 outer sep=1.5pt},
every path/.style={
  thick, 
  rounded corners
  }
}  

\begin{table}
\centering
\begin{tabular}{|c|c|c|g|c|}
 \hline
  bla   &  bla  & bla   & $b_1$\tikzmark{a} \\ \hline
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline
  bla   &  bla  & bla   & bla \\\hline   
  bla   &  bla  & bla   & bla \\\hline
 \end{tabular}
\end{table}
\begin{tikzpicture}[remember picture,overlay]
  \node [right=2cm,above=2cm,minimum width=0pt] at (pic cs:a) (A) {A};
  \draw [<-,out=5,in=180] ([xshift=15pt]{pic cs:a}) to (A);
\end{tikzpicture}
\end{frame}

\end{document}

введите описание изображения здесь

Непонятно, зачем вы загружаете hf-tikzпакет, ведь он не играет никакой роли в вашем MWE.

Связанный контент