这个问题与这个问题相关:在正文旁边添加大括号,但不是重复的。
我itemize
在 Beamer 演示文稿中有一个。我想在其中的一些项目上加一个括号。以下是我目前所拥有的:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\begin{document}
\begin{frame}
\frametitle{Here is text}
\begin{itemize}[<+->]
\item A first item \tikzmark{topbrace}
\item Another item, also inside the brace \tikzmark{bottombrace}\tikzmark{right}
\item Outside the brace
\end{itemize}
\onslide<+->{
\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace,amplitude=0.5em},decorate,ultra thick,black]
($(right)!(topbrace.north)!($(right)-(0,1)$)$) -- ($(right)!(bottombrace.south)!($(right)-(0,1)$)$);
\end{tikzpicture}
}
\end{frame}
\end{document}
(需要编译两次才能得到正确的结果)。顺便问一下,这是为什么?这跟这个东西有关吗remember picture
?
我对这个优秀解决方案有两个问题:间距看起来不正确(我希望支架的顶部更高),并且我想在支架的右侧添加文本(见图)。
我无法完全理解用于添加带有文本的额外节点或修改间距的复杂定位命令......
我真正想要的是回答这个问题,解释一下!
和$
正在做什么......
答案1
这些符号用于坐标计算。您需要加载库calc
才能
\usetikzlibrary{calc}
使用坐标计算函数
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (5,3);
\path coordinate (a) at (1,1)
coordinate (b) at (5,3)
coordinate (c) at (2,3);
\fill [blue] (a) circle (2pt);
\fill [green] (b) circle (2pt);
\fill [red] ($(a) + 2*(1,1)$) circle (2pt);
\fill [purple] ($(a)!-.5!(b)$) circle (2pt);
\coordinate (d) at ($(a)!(c)!(b)$);
\fill [black] (c) circle (2pt) (d) circle (2pt);
\draw (c) -- (d);
\end{tikzpicture}
\end{document}
- 使用方法
$
:如您所见,语法使用 TEX 数学符号$
来表示“数学计算”。红色圆圈从 (a) 开始放置。我2*(1,1)
在 (a) 的坐标处添加,因此得到 1+2 和 1+2(就像向量的加法) - 如何使用
!
:我想要获取(a)和(b)之间点的坐标。如果我想要中间点,我会使用($(a)!.5!(b)$)
。我使用(...)
来搜索坐标。然后我使用$..$
进行计算。最后,我使用!number!
来获取线上的一个点(a)--(b)
。就像使用 一样pos =.5
。
答案2
\documentclass{beamer}
\usepackage{picture}
\begin{document}
\begin{frame}{Here is text}
\begin{itemize}[<+->]
\item A first item
\item Another item, also inside the brace
\makebox(0,0){\put(0,2.2\normalbaselineskip){%
$\left.\rule{0pt}{1.1\normalbaselineskip}\right\}$ foo}}
\item Outside the brace
\end{itemize}
\end{frame}
\end{document}
答案3
另一个 TikZ 答案。我认为使用该let
操作可以使代码更容易解析。它还可以节省您使用声明锚点的时间right
。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\begin{document}
\begin{frame}
\frametitle{Here is text}
\begin{itemize}[<+->]
\item A first item \tikzmark{topbrace}
\item Another item, also inside the brace \tikzmark{bottombrace}
\item Outside the brace
\end{itemize}
\onslide<+->{
\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace,amplitude=0.5em},decorate,ultra thick,black]
let \p1=(topbrace), \p2=(bottombrace) in
({max(\x1,\x2)}, {\y1+0.8em}) -- node[right=0.6em] {I'd like some text here} ({max(\x1,\x2)}, {\y2});
\end{tikzpicture}
}
\end{frame}
\end{document}
在 之后let \p1=(topbrace)
,可以使用\x1
和访问其 x 和 y 坐标\y1
。因此更容易找到括号的正确位置(请注意,锚点位于基线上,因此 位于+0.8em
顶点)。如果您将节点放在--
它后面,则将其放置在线的中间。我们希望它位于右边一点。