(抱歉,标题不太好。)
我碰到居中整页 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
您不能嵌套tikzpicture
s — 龙会在那里。但是如果您有足够新的 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}