如何将环境文本放入节点内?

如何将环境文本放入节点内?

考虑文档类中的一个简单环境

  \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替换}\bgroupand来拆分 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环境修改了文本宽度)。但一旦知道了文本宽度和页面宽度,就可以自动化。

相关内容