考虑文档类中的一个简单环境
\newenvironment{abstract}{
\node (tbl) {
};
}
的内容
\begin{abstract}
Content
\end{abstract}
将会出现在 之后node
。如何将内容放入 中node
? 该节点已被 用于tikzpicture
绘制图片背景。
这也适用于 Section:我们如何将节标题和文本放在节点内?一个简单的节标题如下
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
这仅定义了节标题文本。我们如何使用节点内的节标题和文本?
更新:参考与@MartinScharrer 讨论的示例
\newenvironment{abstract}{
\begin{center}
\begin{tikzpicture}
\node (x) {
This is inside node
};
\begin{pgfonlayer}{background}
\draw[rounded corners, top color=red, bottom color=black, draw=white]
($(x.north west)+(0.14,0)$) rectangle ($(x.north east)-(0.13,0.9)$);
\end{pgfonlayer}
\end{tikzpicture}
\end{center}
}
答案1
\node
您可以通过将{
and替换}
为\bgroup
and来拆分 a 的代码\egroup
。这是可能的,因为 TikZ 将节点的内容读取为框而不是宏参数。请注意,您需要设置特殊选项以允许节点内的段落或换行符,或者添加minipage
(or varwidth
) 环境。
\newenvironment{abstract}[1][]{% most likely \renewenvironment!
\begin{tikzpicture}[<picture options>]
\node [<default options>,#1] (tbl) \bgroup
%\begin{minipage}{<some width>}
}{%
%\end{minipage}
\egroup;
\end{tikzpicture}%
}
用法:
\begin{abstract}
My abstract ...
\end{abstract}
另一种方法是使用environ
包来收集整个环境内容,然后\BODY
使用\node [<options>] (<name>) {\BODY};
。
答案2
这可能适用于短文本,但总的来说,将 TeX 从其杀手级文本调整任务中解放出来并不是一个好主意,而且将文本放入节点会使其免受许多 TeX 好东西的影响。
\documentclass{article}
\usepackage{amsmath,tikz,lipsum}
\newcommand{\tikzabstract}[1]{
\begin{abstract}
\tikz[trim left=-4.7cm]\node[draw,text justified,text width=\textwidth] (tbl) {#1};
\end{abstract}
}
\begin{document}
\tikzabstract{\lipsum[1-2]}
\lipsum[3-4]
\end{document}
由于某种原因,我不得不修剪左侧以使节点居中,否则它会向右移动(可能是因为abstract
环境修改了文本宽度)。但一旦知道了文本宽度和页面宽度,就可以自动化。