如何为 tikz 节点内容创建环境

如何为 tikz 节点内容创建环境

(抱歉,标题不太好。)

我碰到居中整页 tikz 图像 - 中间文档纸张尺寸发生变化及其答案https://tex.stackexchange.com/a/55421/11820我将其用作全页 tikz 图片的包装器。现在我想将其放入环境中,但这不适用于

\node at (current page.north west) { … }

就像\node at (current page.north west) {在环境的开始处和}结束处的右括号一样。

我怎样才能“拥抱”整个环境内容?

MWE(不工作)

\newenvironment{tikzpicturebase}
{%
\begin{tikzpicture}[overlay,remember picture]
\node at (current page.north west) {%
\begin{tikzpicture}[overlay,yscale=-1]
}
{
\end{tikzpicture}
};
\end{tikzpicture}
}

答案1

tikzpictures据我理解,此处不支持且不需要嵌套。您可以使用和\bgroup\egroup避免括号平衡问题。

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}

\newenvironment{foobar}
  {%
    \begin{tikzpicture}[remember picture, overlay]
    \node[anchor=north west, inner sep=0pt, outer sep=0pt,
          fill=red, fill opacity=0.3] at (current page.north west)
      \bgroup\ignorespaces
  }%
  {%
      \unskip\egroup;
    \end{tikzpicture}%
  }

\begin{document}
\begin{foobar}
  \includegraphics[width=\paperwidth]{example-image-duck}
\end{foobar}
\end{document}

在此处输入图片描述

这种技术非常强大,因为你甚至可以在环境主体中使用逐字材料(或其他会更改类别代码的讨厌的东西)。例如:

\begin{foobar}
  \Huge \verb|@#{}!%|
\end{foobar}

在此处输入图片描述

答案2

environ包有一个\BODY宏,其中包含您输入到环境中的内容。如果我正确理解了您的愿望,我认为这对您有用。:)

\documentclass{article}
\usepackage{tikz}
\usepackage{environ}

\NewEnviron{tikzpicturebase}
{
    \begin{tikzpicture}[overlay, remember picture]
        \node at (current page.north west) {\BODY};
    \end{tikzpicture}
}

\begin{document}
    \begin{tikzpicturebase}
        Hello! I am in the upper left corner! :)
    \end{tikzpicturebase}
\end{document}

答案3

您不能嵌套tikzpictures — 龙会在那里。但是如果您有足够新的 latex,您可以使用参数类型“抓取”整个环境+b,并且您可以tikzpicture使用框嵌套一个来保存它。

完整示例:

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}

\NewDocumentEnvironment{foo}{O{north west} +b}{%
    \begin{tikzpicture}[overlay,remember picture]
    \node[anchor=#1] at (current page.#1) {#2};
}{%
    \end{tikzpicture}%
}
\newbox{\abox}
\sbox{\abox}{\begin{tikzpicture}
        \draw[red, ultra thick](0,0) circle[radius=20pt];
    \end{tikzpicture}%
}
\begin{document}
\begin{foo}
  \includegraphics[width=5cm]{example-image-duck}
\end{foo}
\begin{foo}[center]
    \usebox{\abox}
\end{foo}
\end{document}

上述代码片段的输出

相关内容