我知道如何全局设置 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}
这只会将修改后的项目标签和警报放置在框架规范指定的框架上。