Tikz:如何将节点中的脚注移出该组?

Tikz:如何将节点中的脚注移出该组?

抱歉,标题有点奇怪,我努力想出了别的东西。

我已经定义了自己的引文环境,并在引文周围加上了括号。为了做到这一点,我使用了 tikz,并将引文内容放在一个节点中。如果我现在在这个节点中使用 \footnote,它就直接位于引文下方。我宁愿将脚注放在页面末尾,那么我如何才能“脱离”tikz 节点似乎创建的本地组?

\documentclass[parskip=half]{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{environ,xcolor}
\usepackage{lipsum}

\NewEnviron{bquote}{%
\noindent%
\par%
\addmargin{30pt}
\begin{tikzpicture}%
\node[text width=0.97\linewidth](q){\BODY};%
\draw[ultra thick,line width=7pt,overlay,gray!30] (q.north west) -- ($(q.north
west) - (15pt,0)$) -- ($(q.south west) - (15pt,0)$) -- (q.south west);%
\draw[ultra thick, line width=7pt,overlay,gray!30] (q.north east) -- ($(q.north
east) + (15pt,0)$) -- ($(q.south east) + (15pt,0)$) -- (q.south east);% 
\end{tikzpicture}%
\footnote{Outside the group}%just a test
\par%
}%

\begin{document}
 \lipsum[1]
\begin{bquote}
\lipsum[3]\footnote{Inside the node and sadly local}
\end{bquote}
\lipsum[1]
\end{document}

在此处输入图片描述

答案1

您可以使用footnote将 打包并包装tikzpicturesavenotes环境中。这将存储所有内部脚注,否则这些脚注将由 的内部minipageTikZ 用途收集\node [text width=<length>]

这里的代码还有一些其他的改进:

\documentclass[parskip=half]{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xcolor}
\usepackage{footnote}
\usepackage{lipsum}

\newenvironment{bquote}{%
\par%
\noindent%
\addmargin{30pt}%
\begin{savenotes}%
\begin{tikzpicture}%
\node[text width=0.97\linewidth](q)\bgroup
}{%
\egroup;%
\draw[ultra thick,line width=7pt,overlay,gray!30] (q.north west) -- ($(q.north
west) - (15pt,0)$) -- ($(q.south west) - (15pt,0)$) -- (q.south west);%
\draw[ultra thick, line width=7pt,overlay,gray!30] (q.north east) -- ($(q.north
east) + (15pt,0)$) -- ($(q.south east) + (15pt,0)$) -- (q.south east);% 
\end{tikzpicture}%
\end{savenotes}%
\footnote{Outside the group}%just a test
\par%
}%

\begin{document}
 \lipsum[1]
\begin{bquote}
\lipsum*[3]\footnote{Inside the node and sadly local} bla bla
\end{bquote}
\lipsum[1]
\end{document}

图像

答案2

据我从其他问题中了解,TikZ 为节点创建了一个小页面,因此这解释了为什么脚注会放在节点内。要获得所需的其他行为,您可以尝试\footnotemark在希望脚注出现的位置使用,然后使用\footnotetext{the text of the note} 外部环境,以使其出现在页面的底部。

您还可以尝试自动化该过程:

\def\pendingfootnotes{}
\let\ex\expandafter
\newcommand\externfootnote[1]{%
  \ex\global\ex\def\ex\pendingfootnotes\ex{\ex\pendingfootnotes\footnotetext{#1}}%
  \footnotemark%
}

并在环境的最后添加

\pendingfootnotes
\global\def\pendingfootnotes{}

将它们插入到末尾。我使用“externfootnote”,这样如果您仍然想要“正常”\footnote行为,它仍然可用。我认为您需要\global确保更改在 TikZ 环境之外传播,但我可能错了...

相关内容