我正在尝试定义一个环境,该环境将根据环境参数将内容放置在一个tikzpicture
node
位置。我对 LaTeX、TikZ 和 PGF 还很陌生,因此语法很有挑战性。
目前我有以下内容:
\NewEnviron{absnode}[2]
{
\tikzset{%
XPOS/.style={xshift=#1},
YPOS/.style={yshift=#2}
}
\begin{tikzpicture}
\node[XPOS, YPOS, anchor=north west] at (current page.north west) {%
\BODY
};
\end{tikzpicture}
}
然后我尝试将它与以下对象一起使用:
\begin{absnode}{500 pt}{-10 pt}
Text inside the node positioned relative to the top left corner
\end{absnode}
这……不起作用。上面的代码可以编译,但节点似乎没有定位到左上角以外的位置(没有应用移位)。
我错过了什么?
答案1
好的,原来是忘记了[remember picture, overlay] arguments to
\begin{tikzpicture}`
通过下面的操作,它可以按预期工作:
\NewEnviron{absnode}[2]
{
\tikzset{%
XPOS/.style={xshift=#1},
YPOS/.style={yshift=#2}
}
\begin{tikzpicture}[remember picture, overlay]
\node[XPOS, YPOS, anchor=north west] at (current page.north west) {%
\BODY
};
\end{tikzpicture}
}
答案2
有很多方法可以实现这个结果。记得运行两次。
通常文本与基线 [anchor=base west] 对齐。
\documentclass[landscape]{article}
\usepackage{tikz}
\usepackage{environ}
\NewEnviron{absnode}[2]
{\begin{tikzpicture}[remember picture, overlay]
\path (current page.north west) ++(#1,#2) node[anchor=north west] {\BODY};
\end{tikzpicture}}
\begin{document}
\begin{absnode}{500 pt}{-10 pt}
Text inside the node positioned relative to the top left corner
\end{absnode}
\end{document}