tikzmark 使用的混亂

tikzmark 使用的混亂

我正在嘗試使用 tikzmark 做兩件不同的事情,雖然每一件事情都可以單獨工作,但當我合併每件事情的乳膠代碼時,我收到一個錯誤。我認為這與我使用 tikzmark 的方式有關,但不確定。

第一段程式碼在矩陣中的數字周圍繪製方框,運作正常,如下所示:

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{booktabs}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{kbordermatrix}
\usetikzlibrary{arrows.meta,patterns,calc}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[4][]{%
\tikz[overlay,remember picture]{%
\coordinate (TopLeft)     at ($(#2)+(-0.2em,0.9em)$);
\coordinate (BottomRight) at ($(#3)+(0.2em,-0.3em)$);
%
\path (TopLeft); \pgfgetlastxy{\XCoord}{\IgnoreCoord};
\path (BottomRight); \pgfgetlastxy{\IgnoreCoord}{\YCoord};
\coordinate (LabelPoint) at ($(\XCoord,\YCoord)!0.5!(BottomRight)$);
%
\draw [red,#1] (TopLeft) rectangle (BottomRight);
\node [below, #1, fill=none, fill opacity=1] at (LabelPoint) {#4};
}
}
\begin{document}
%Now Drawbox thing
\begin{equation} \label{eq:ODP all terms matrix}
\kbordermatrix{\mbox{cells} & (1,2) & (2,1) & (2,2)\\
(1,2)&\tikzmark{leftx}205.1354\tikzmark{rightx} & 0.0000 & 102.5677\\
(2,1)&0.0000 & \tikzmark{lefty}286.1821 & 57.2364 \\
(2,2)&102.5677 & 57.2364 & 206.9669\tikzmark{righty}
}
\end{equation}
\DrawBox[thick, black,dashed,fill=gray, fill opacity=0.3]{leftx}{rightx}{}
\DrawBox[thick, black, dashed,fill=gray,fill opacity=0.3]{lefty}{righty}{}
\end{document}

第二段程式碼在表格下方繪製了一些箭頭,效果也很好(感謝用戶 Bordaigorl):

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{booktabs}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{tikzmark,arrows.meta,patterns,calc}
\newcommand\DrawArrow[4][]{
\begin{tikzpicture}[
remember picture,
overlay,
arr/.style={draw=gray,line width=2pt, {-latex}, #1},
xshift=1em,
yshift=-3ex,
]
\draw[arr]
([xshift=1ex]pic cs:#2)
to[out=-50,in=-150,looseness=1.0] node[below=0pt] {#4}
([xshift=-1ex]pic cs:#3);
\end{tikzpicture}
}
\begin{document}
\begin{figure}[htbp]
\centering
\includegraphics[scale=0.8]{CLmethoddiagram.png}
\caption{png version - low res}
\end{figure}
\begin{table}[htbp]
\centering
\caption{tikz version}
\begin{tabular}{@{}lllllll@{}}
\toprule
& \multicolumn{6}{c}{Development year} \\
\cmidrule(l){2-7}
{Year} & {1} & {2} & {3} & {4} & {5} & {6} \\
\midrule
2009  &            443  &        1,136  &        2,128  &        2,898  &             3,403  &        3,873  \\
2010  &            396  &        1,333  &        2,181  &        2,986  &            3,692  &  \\
2011  &            441  &        1,288  &        2,420  &        3,483  &       &  \\
2012  &            359  &        1,421  &        2,864  &       &       &          \\
2013  &            377  &        1,363  &       &       &       &  \\
2014  &  \tikzmark{start1B}344\phantom{,3}& \tikzmark{start2B}- &      \tikzmark{start3B}   -  &  \tikzmark{start4B}   -  &   \tikzmark{start5B}   -  &\tikzmark{start6B}  - \\
\midrule
&&&&&&\\
\DrawArrow{start1B}{start2B}{1-2}
\DrawArrow{start2B}{start3B}{2-3}
\DrawArrow{start3B}{start4B}{3-4}
\DrawArrow{start4B}{start5B}{4-5}
\DrawArrow{start5B}{start6B}{5-6}
\\
\bottomrule
\end{tabular}%
\end{table}%
\end{document}

但是當我將它們合併在一起時,我收到錯誤。合併後的程式碼如下:

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{booktabs}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{kbordermatrix}
\usetikzlibrary{tikzmark,arrows.meta,patterns,calc}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[4][]{%
    \tikz[overlay,remember picture]{%
        \coordinate (TopLeft)     at ($(#2)+(-0.2em,0.9em)$);
        \coordinate (BottomRight) at ($(#3)+(0.2em,-0.3em)$);
        %
        \path (TopLeft); \pgfgetlastxy{\XCoord}{\IgnoreCoord};
        \path (BottomRight); \pgfgetlastxy{\IgnoreCoord}{\YCoord};
        \coordinate (LabelPoint) at ($(\XCoord,\YCoord)!0.5!(BottomRight)$);
        %
        \draw [red,#1] (TopLeft) rectangle (BottomRight);
        \node [below, #1, fill=none, fill opacity=1] at (LabelPoint) {#4};
    }
}


\newcommand\DrawArrow[4][]{
\begin{tikzpicture}[
remember picture,
overlay,
arr/.style={draw=gray,line width=2pt, {-latex}, #1},
xshift=1em,
yshift=-3ex,
]
\draw[arr]
([xshift=1ex]pic cs:#2)
 to[out=-50,in=-150,looseness=1.0] node[below=0pt] {#4}
([xshift=-1ex]pic cs:#3);
 \end{tikzpicture}
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Using tikzmark}
\begin{tabular}{@{}lllllll@{}}
\toprule
& \multicolumn{6}{c}{Development year} \\
\cmidrule(l){2-7}
{Year} & {1} & {2} & {3} & {4} & {5} & {6} \\
\midrule
2009  &            443  &        1,136  &        2,128  &        2,898  &        3,403  &        3,873  \\
2010  &            396  &        1,333  &        2,181  &        2,986  &        3,692  &  \\
2011  &            441  &        1,288  &        2,420  &        3,483  &       &  \\
2012  &            359  &        1,421  &        2,864  &       &       &  \\
2013  &            377  &        1,363  &       &       &       &  \\
2014  &  \tikzmark{start1B}344\phantom{,3}& \tikzmark{start2B}- &  \tikzmark{start3B}   -  &  \tikzmark{start4B}   -  &   \tikzmark{start5B}   -  &\tikzmark{start6B}  - \\
\midrule
&&&&&&\\
\DrawArrow{start1B}{start2B}{1-2}
\DrawArrow{start2B}{start3B}{2-3}
\DrawArrow{start3B}{start4B}{3-4}
\DrawArrow{start4B}{start5B}{4-5}
\DrawArrow{start5B}{start6B}{5-6}
\\
\bottomrule
\end{tabular}%
\end{table}%
%Now Drawbox thing
\begin{equation} \label{eq:ODP all terms matrix}
\kbordermatrix{\mbox{cells} & (1,2) & (2,1) & (2,2)\\
(1,2)&\tikzmark{leftx}205.1354\tikzmark{rightx} & 0.0000 & 102.5677\\
(2,1)&0.0000 & \tikzmark{lefty}286.1821 & 57.2364 \\
(2,2)&102.5677 & 57.2364 & 206.9669\tikzmark{righty}
}
\end{equation}
\DrawBox[thick, black,dashed,fill=gray, fill opacity=0.3]{leftx}{rightx}{}
\DrawBox[thick, black, dashed,fill=gray,fill opacity=0.3]{lefty}{righty}{}


\end{document}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}我認為這一定與在第一段程式碼中使用然後\usetikzlibrary{tikzmark,arrows.meta,patterns,calc}在第二段程式碼中使用有關,所以我想可能有一個簡單的解決方案,但到目前為止它讓我失敗。有人可以幫忙嗎?

答案1

您已定義 tikzmark 兩次。

原來的方式

\newcommand{\tikzmark}....

(我認為來自這個網站上的答案)

然後再後來打包的方式

\usetikzlibrary{tikzmark,...

現在你只需要 tikz 函式庫版本。

那你需要適應使用pic座標的新版本

\coordinate (TopLeft)     at ($(pic cs:#2)+(-0.2em,0.9em)$);
\coordinate (BottomRight) at ($(pic cs:#3)+(0.2em,-0.3em)$);

在此輸入影像描述

相關內容