根据警报模式设置投影仪项目符号的颜色

根据警报模式设置投影仪项目符号的颜色

我知道如何全局设置 beamer 的 itemize 项目符号的颜色。我已经为它们定义了自己的符号,我想在\alert模式下为它们着色。(目前只有文本的颜色会改变,项目符号的颜色不会改变。)

目前,我对“项目符号”使用以下定义:

\setbeamertemplate{itemize        item}{\CorkSquare[size=0.18,linewidth=0.70pt]}
\setbeamertemplate{itemize     subitem}{\CorkSquare[size=0.16,linewidth=0.67pt]}
\setbeamertemplate{itemize  subsubitem}{\CorkSquare[size=0.14,linewidth=0.65pt]}
\def\CorkSquare[size=#1,linewidth=#2]{%
    \begin{tikzpicture}
    \draw[use as bounding box]
         (+0.75*#1,-0.15*#1)
         (+0.80*#1,+0.75*#1)
         (+0.75*#1,-0.15*#1);
    \filldraw[line width=#2,draw=cork@colour@normal,fill=cork@colour@normal!19!white]
             (0,0) rectangle (#1,#1);
    \end{tikzpicture}%
}

任何帮助将不胜感激。

答案1

这假设您可以使用操作规范(即,您想要突出显示整个\item而不是部分)。通常,操作规范的工作方式如下,\item<1-|alert@1> text它将显示从幻灯片 1 开始的项目,并仅在幻灯片 1 上突出显示它。我们可以做的是定义我们自己的警报版本以更改itemize item该特定项目的警报,然后执行正常操作alert。这是通过创建一个新环境来完成的<actionname>env。因此,为了获得一个myalert动作,我们定义myalertenv环境。我们可以按如下方式执行此操作:

\newenvironment{myalertenv}{\only{\setbeamertemplate{itemize item}{\def\mycolor{red}\CorkSquare[size=0.18,linewidth=0.70pt]}}\alertenv}{\endalertenv}

由于我不知道您的定义,cork@colour@normal我稍微修改了代码以使用该\mycolor命令。您可以修改它以使用您想要的。完整代码如下所示:

\documentclass{beamer}
\usepackage{tikz}
\begin{document}
  \setbeamertemplate{itemize        item}{\CorkSquare[size=0.18,linewidth=0.70pt]}
\setbeamertemplate{itemize     subitem}{\CorkSquare[size=0.16,linewidth=0.67pt]}
\setbeamertemplate{itemize  subsubitem}{\CorkSquare[size=0.14,linewidth=0.65pt]}
\def\mycolor{blue}
\def\CorkSquare[size=#1,linewidth=#2]{%
    \begin{tikzpicture}
    \draw[use as bounding box]
         (+0.75*#1,-0.15*#1)
         (+0.80*#1,+0.75*#1)
         (+0.75*#1,-0.15*#1);
    \filldraw[line width=#2,draw=\mycolor,fill=\mycolor!19!white]
             (0,0) rectangle (#1,#1);
    \end{tikzpicture}%
}
\newenvironment{myalertenv}{\only{\setbeamertemplate{itemize item}{\def\mycolor{red}\CorkSquare[size=0.18,linewidth=0.70pt]}}\alertenv}{\endalertenv}
\begin{frame}
  \begin{itemize}
    \item<1-> test
    \item<2-|myalert@2> test
  \end{itemize}
\end{frame}
\end{document}

编辑:顺便说一句,您真的应该考虑将\CorkSquare命令更改为\def\CorkSquare[#1,#2]。然后,您可以使用#1作为大小并将#2选项放入\filldraw。现在您也可以只放在, other options后面linewidth=...,但调用它时看起来有点奇怪,并且需要您更改顺序,因为否则 draw 和 fillcolor 将被覆盖。这样您就不需要构造了\mycolor。您的代码将变成以下内容,我认为这会更简洁一些。

\documentclass{beamer}
\usepackage{tikz}
\begin{document}
  \setbeamertemplate{itemize        item}{\CorkSquare[size=0.18,line width=0.70pt]}
\setbeamertemplate{itemize     subitem}{\CorkSquare[size=0.16,line width=0.67pt]}
\setbeamertemplate{itemize  subsubitem}{\CorkSquare[size=0.14,line width=0.65pt]}
\def\CorkSquare[size=#1,#2]{%
    \begin{tikzpicture}
    \draw[use as bounding box]
         (+0.75*#1,-0.15*#1)
         (+0.80*#1,+0.75*#1)
         (+0.75*#1,-0.15*#1);
    \filldraw[draw=blue,fill=blue!19!white,#2]
             (0,0) rectangle (#1,#1);
    \end{tikzpicture}%
}
\newenvironment{myalertenv}{\only{\setbeamertemplate{itemize item}{\CorkSquare[size=0.18,line width=0.70pt,draw=red,fill=red!19!white]}}\alertenv}{\endalertenv}
\begin{frame}
  \begin{itemize}
    \item<1-> test
    \item<2-|myalert@2> test
  \end{itemize}
\end{frame}
\end{document}

编辑:在您评论说多个框架具有警报规范时会出现问题之后,我对此进行了研究。事实上是这样的。这是因为通常由操作创建的框架规范放在 上\only。实际上,它们被放置在环境开始的扩展之后,因此 应该\only是最后。现在\alertenv是最后,因此框架规范传递给alert而不是\only。我们不能将 放在\alertenv\only,因为在环境的末尾没有框架规范,因此\endalertenv不会出现在 中,从而显示在每一帧中,从而导致问题。我们需要做的是在 中放置一些额外的代码,\only使得末尾的命令仅\endalertenv\only执行 时定义为 ,否则等于\relax。您可以使用以下内容作为环境定义:

\newenvironment{myalertenv}{\let\neweae\relax\only{\setbeamertemplate{itemize item}{\CorkSquare[size=0.18,line width=0.70pt,draw=red,fill=red!19!white]}\alertenv\let\neweae\endalertenv}}{\neweae}

这只会将修改后的项目标签和警报放置在框架规范指定的框架上。

相关内容