更新

更新

我面临着将幻灯片的想法转换成 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 帧

在此处输入图片描述

相关内容