![更新](https://linux22.com/image/281141/%E6%9B%B4%E6%96%B0.png)
我面临着将幻灯片的想法转换成 LaTeX 代码的困难。
想法如下
它基本上是由
- 3 个描述项
- 子项目描述文本
- 大括号内字体与文本相同
- 项目要点
到目前为止,我已经实现了描述项目和要点的 TiKz 解决方案。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{frame}{frame title}
\begin{description}
\item[description item] \hspace{.5cm} \begin{tikzpicture}[baseline={(A.center)}]
\node[text width=7cm,align=center] (A) {\begin{itemize} \item some bullet points \item some other bullet point \end{itemize}};
\draw[decorate,decoration={brace,amplitude=3pt},color=blue] (A.south west) -- (A.north west);
\end{tikzpicture}
\end{description}
\end{frame}
\end{document}
真的很想知道如何实现子项目描述文本和花括号,并将文本字体缩放到项目符号项的高度。
寻找基于 TikZ 的解决方案。
答案1
真的很容易stackengine
,而且有些scalerel
还用于支撑。
\documentclass{beamer}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}
\renewcommand\stackalignment{l}
\parskip .5cm
\begin{document}
\begin{frame}{frame title}
\stackunder{\parbox{5cm}{Description Item 1}}{%
\hspace{1cm}\Longunderstack{%
--- sub item 1\\
--- sub item 2
}%
}
\scalerel[.3cm]{\{}{%
\Centerstack{%
$\bullet$ bullet point 1\\
$\bullet$ bullet point 2\\
$\bullet$ bullet point 3
}%
}
\stackunder{\parbox{5cm}{Description Item 2}}{%
\hspace{1cm}\Longunderstack{%
--- sub item 1\\
--- sub item 2\\
--- sub item 3
}%
}
\scalerel[.3cm]{\{}{%
\Centerstack{%
$\bullet$ bullet point 1\\
~~-- sub-bullet point 1\\
~~-- sub-bullet point 2\\
$\bullet$ bullet point 2
}%
}
\stackunder{\parbox{5cm}{Description Item 3}}{%
\hspace{1cm}\Longunderstack{%
--- sub item 1
}%
}
\scalerel[.3cm]{\{}{%
\Centerstack{%
$\bullet$ bullet point 1\\
$\bullet$ bullet point 2
}%
}
\end{frame}
\end{document}
为了响应 OP 对项目/子项目/项目符号的字体进行调整的请求,可以将这些内容放在宏中\myitem
,如下例所示:
\documentclass{beamer}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}
\usepackage{xcolor}
\renewcommand\stackalignment{l}
\parskip .5cm
\newcommand\myitem[3]{%
\stackunder{\rmfamily\bfseries\parbox{5cm}{#1}}{%
\hspace{1cm}\itshape\Longunderstack{#2}}%
\scalerel[.3cm]{\{}{\color{red}\Centerstack{#3}}
}
\begin{document}
\begin{frame}{frame title}
\myitem{Description Item 1}%
{%
--- sub item 1\\
--- sub item 2
}%
{%
$\bullet$ bullet point 1\\
$\bullet$ bullet point 2\\
$\bullet$ bullet point 3
}
\end{frame}
\end{document}
答案2
这是基于 TikZ 的尝试。
更新
响应 OP 的评论,以下代码使用括号字符的拉伸版本并调整括号块的垂直对齐。 (绘制红色框和线条以显示对齐。注释掉代码的相关部分以关闭它们。)
代码
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.pathreplacing}
\usepackage{scalerel}
\newcommand\braceitem[2][]{%
\hfill%
\begin{tikzpicture}[overlay,yshift=.5ex]
\node[text width=5cm,align=left,inner sep=0pt] (#1) {\vspace{-8pt}{#2}};
\path let \p1=(#1.north), \p2=(#1.south), \n1={\y1-\y2} in
node[xshift=5pt] at(#1.west){\stretchto{\lbrace}{\n1}};
\draw[red](#1.west)--+(-5cm,0) (#1.north east)rectangle(#1.south west); % comment out
\end{tikzpicture}\hspace*{50pt}
}
\newcommand\qitem[1]{\begin{itemize}#1\end{itemize}}
\begin{document}
\begin{frame}{Frame Title}
\begin{description}
\item[description item 1] \braceitem[A]{\qitem{
\item some bullet points \qitem{
\item sub bullet point
\item sub bullet point
}
\item some other bullet points
}}
\begin{itemize}
\item sub item 1
\item sub item 2
\end{itemize}
\vskip20pt
\item[description item 2] \braceitem[B]{\begin{itemize}\item some other bullet point\item bullet \qitem{\item sub bullet \item sub bullet}\end{itemize}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\end{description}
\end{frame}
\begin{frame}{Frame Title}
\begin{itemize}
\item[] description item 1
\braceitem[c]{\qitem{\item bullet 1 \qitem{\item sub bullet 1 \item sub bullet 2} \item bullet 2}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\vskip20pt
\item[] description item 2
\braceitem[d]{\qitem{\item bullet 1 \qitem{\item sub bullet 1 \item sub bullet 2} \item bullet 2}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
第二帧输出
我个人更喜欢第二框架中的布局(使用itemize
而不是description
第一级列表)。该qitem
命令只是一种快捷方式,可以节省\braceitem
命令中的一些输入。
这种方法的一个缺点是您必须使用\vskip
或类似方法手动调整描述项之间的间距。
代码
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\newcommand\braceitem[2][]{%
\hfill%
\begin{tikzpicture}[overlay,baseline={(#1.center)}]%
\node[text width=9cm,align=left] (#1) {\vspace{-8pt}#2};%
\draw[decorate,decoration={brace,amplitude=3pt},color=blue] (#1.south west) -- (#1.north west); %
\end{tikzpicture}
}
\newcommand\qitem[1]{\begin{itemize}#1\end{itemize}}
\begin{document}
\begin{frame}{Frame Title}
\begin{description}
\item[description item 1] \braceitem[A]{\qitem{
\item some bullet points \qitem{
\item sub bullet point
\item sub bullet point
}
\item some other bullet points
}}
\begin{itemize}
\item sub item 1
\item sub item 2
\end{itemize}
\vskip20pt
\item[description item 2] \braceitem[B]{\begin{itemize}\item some other bullet point\item bullet \qitem{\item sub bullet \item sub bullet}\end{itemize}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\end{description}
\end{frame}
\begin{frame}{Frame Title}
\begin{itemize}
\item[] description item 1
\braceitem[c]{\qitem{\item bullet 1 \qitem{\item sub bullet 1 \item sub bullet 2} \item bullet 2}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\vskip20pt
\item[] description item 2
\braceitem[d]{\qitem{\item bullet 1 \qitem{\item sub bullet 1 \item sub bullet 2} \item bullet 2}}
\begin{itemize}
\item sub item 1
\item sub item 2
\item sub item 3
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
输出
第 1 帧
第 2 帧