如何引用从 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}
这里p
和q
可以正确显示,但x
和y
不显示。这似乎不起作用的原因是垂直运算符|-
不理解图片坐标参考。如果我理解了
\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}
生成: