使用 tikzmark 的垂直坐标系

使用 tikzmark 的垂直坐标系

如何引用从 tikz 标记和坐标绘制的垂线的交点坐标?

我想用它将图像与我的投影仪演示文稿中的项目符号对齐,例如,

\documentclass[xcolor={svgnames}]{beamer}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc,positioning,tikzmark}

\begin{document}

\begin{frame}
  \frametitle{Latent Variable Models}

  \begin{itemize} 
    \item Item 1 \tikzmark{a}
      \begin{itemize}
        \item sub item 1
        \item sub item 2
        \item sub item 3
        \item sub item 4
      \end{itemize}
    \item Item 2 \tikzmark{b}
      \begin{itemize}
        \item sub item 1
        \item sub item 2
        \item sub item 3
        \item sub item 4
      \end{itemize}
  \end{itemize}
  \begin{tikzpicture}[remember picture, overlay]
    \draw[use as bounding box] (current page.north west) rectangle (current page.south east);
    \node (mark) at (5cm,0) {m};
    \node (a) at (pic cs:a) {a};
    \node (b) at (pic cs:b) {b};
    \node (p) at (a -| mark) {p};
    \node (q) at (b -| mark) {q};
    \node (x) at (pic cs:a -| mark) {x};
    \node (y) at (pic cs:b -| mark) {y};
  \end{tikzpicture}
\end{frame}

\end{document}

输出

这里pq可以正确显示,但xy不显示。这似乎不起作用的原因是垂直运算符|-不理解图片坐标参考。如果我理解了 \node (y) at (mark |- pic cs:b) {y};,我会得到错误“未知坐标系‘mark |- pic’”。

答案1

我确信,这与在 TikZ 中结合 |- 和 !.5!(pic cs:a -| mark)(有关详细信息,请参阅我的回答),即TikZ 必须弄清楚两个复杂的语法:pic cs:a-|。问题是它检查cs:语法第一的-|语法之前,它将整个东西传递给cs:处理器并且从不查看-|(它会寻找带有名称的 tikzmark a -| mark)。

您希望检查以相反的方式进行,因为您希望它注意到第一个-|,并且仅在之后查看cs:。因此,您需要pic cs:a在第一遍中保护该部分免受处理器的影响。做到这一点的方法是将其括在括号中,正如 Ignasi 在他的评论中所说的那样。这确保 TikZ 看到第一个,并且仅在将其反馈回解析器时-|看到。pic cs:a

因此:

\documentclass[xcolor={svgnames}]{beamer}
%\url{https://tex.stackexchange.com/q/118584/86}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc,positioning,tikzmark}

\begin{document}

\begin{frame}
  \frametitle{Latent Variable Models}

  \begin{itemize} 
    \item Item 1 \tikzmark{a}
      \begin{itemize}
        \item sub item 1
        \item sub item 2
        \item sub item 3
        \item sub item 4
      \end{itemize}
    \item Item 2 \tikzmark{b}
      \begin{itemize}
        \item sub item 1
        \item sub item 2
        \item sub item 3
        \item sub item 4
      \end{itemize}
  \end{itemize}
  \begin{tikzpicture}[remember picture, overlay]
    \draw[use as bounding box] (current page.north west) rectangle (current page.south east);
    \node (mark) at (5cm,0) {m};
    \node (a) at (pic cs:a) {a};
    \node (b) at (pic cs:b) {b};
    \node (p) at (a -| mark) {p};
    \node (q) at (b -| mark) {q};
    \node (x) at ({pic cs:a} -| mark) {x};
    \node (y) at ({pic cs:b} -| mark) {y};
  \end{tikzpicture}
\end{frame}

\end{document}

生成:

正确定位 tikzmarks

相关内容