使用 tikzmark 设置西、东、北、南的位置

使用 tikzmark 设置西、东、北、南的位置

我正在使用该tikzmarkusetikzlibrary(tikzmark)

下面的代码

\newcommand{\DrawCircle}[1]{%
  \begin{tikzpicture}[overlay,remember picture]
    \draw[color=red] (pic cs:#1) circle (0.25cm);
  \end{tikzpicture}
}

有效,但是这个代码

\newcommand{\DrawHLine}[3][]{%
  \begin{tikzpicture}[overlay,remember picture]
    \draw[shorten <=0.2em, #1] (pic cs:#2.west) -- (pic cs:#3.east);
  \end{tikzpicture}
}

由于.west和,无法正确绘制线条.east。如果我删除它们,线条就会被绘制。如何正确使用.west.east.north和?.southtikzmark

答案1

tikzmark创建坐标并且坐标没有不同的锚点,因为它们是点。因此coordinate.west与 相同,coordinate.east并且没有必要定义它们。

[借鉴percusse 的评论,它们都等同于 ,coordinate.center与 完全相同coordinate。]

答案2

作为 cfr 答案的扩展,您可以定义自己的\tikzmark

\documentclass{article}
\usepackage{tikz}
\newcommand{\tikzmark}[2]{%
\tikz[overlay,remember picture,baseline]\node [anchor=base] (#1) {#2};
}
\newcommand{\DrawHLine}[3][]{%
  \begin{tikzpicture}[overlay,remember picture]
    \draw[shorten <=0.2em, #1] (#2.west) -- (#3.east);
  \end{tikzpicture}
}
\begin{document}
  \tikzmark{a}{Some text in tikzmark}

  \mbox{}\hfill
  \tikzmark{b}{Some text in another tikzmark}
  \DrawHLine{b}{a}
\end{document}

这里\node使用 而不是\coordinate来使east west等锚可用。如果您正在加载tikzmark库,请不要忘记为宏指定不同的名称。

在此处输入图片描述

答案3

cfr 的答案并不完全正确,但对于实际目的来说已经足够接近正确。确实tikzmark不会创建节点,但也不会创建坐标。它不会创建任何东西,它几乎只做了在页面上标记一个点所需的最低限度的事情,仅此而已(不是相当最低限度,有\pgfmark是绝对最低限度)。不创建坐标或节点的意义在于,这样位置就可以使用了发出\tikzmark以及之后(节点和坐标仅在之后可用)。

原始版本\tikzmark与 Harish 的版本非常相似,但经过修改(我想是为了回答这里的一个问题)为当前版本,以应对上述情况。尽管如此,为了提供与原始版本相同的功能,\tikzmark可以采用可选的第一个参数,该参数可以是任何 TikZ 代码。

因此将在 内部\tikzmark[{\node[anchor=base] {\(-1\)}}]{a}产生一个。 (此外, 的名称传递时没有“保护”,因此它可以被选择为将更多选项传递给命令,如。)这与 Harish 的版本不太一样,但要知道在参数中放什么,我需要确切地知道你试图做什么。node\tikzmarktikzmark\tikz\tikzmark[stuff]{a,baseline=0pt}tikzmark

然而,它的哲学tikzmark是,它解决了基本问题,但没有每一个问题。如果你想做一些复杂的事情,那么你最好制作一个合适的 tikzpicture 或你自己的宏(正如 Harish 建议的那样)。可能性的数量tikzmark如此之大,以至于我无法预测每一个。因此,虽然你可以选择内置\tikzmark来做你想做的事情,但定义一个新的宏是“LaTeX 方式”。毕竟,\tikzmark生活就是这样开始的。

相关内容