
「動作する」ものがありますが、もっとエレガントな解決策があるかどうか疑問に思っています。beamer で itemize の後にテキストをボックスで囲みたいので、次の操作を実行しています。
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item Software-as-a-Service?
\item Platform-as-a-Service?
\item \only<-4>{Infrastructure-as-a-Service}\only<5->{\fcolorbox{red}{white}{Infrastructure-as-a-Service}}?
\item Other-stuff-as-a-Service?
\end{itemize}
\end{frame}
\end{document}
希望する効果は得られましたが (ボックス スライドにいくらかスペースが追加されましたが、これは理想的ではありません)、これをもっと自然に行う方法はないでしょうか。オンラインや信頼できる で検索してみましたtexdoc beamer
が、間違った場所を探しているのかもしれません。
私も試しました:
\item \fcolorbox<beamer:6>{red}{white}{Infrastructure-as-a-Service}?
しかし、赤いボックスが強調表示されるまで、黒いボックスが残りました
答え1
tikzmark
実証済みのアイデアを活用できる
コード
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
% tikzmark command, for shading over items
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item Software-as-a-Service?
\item Platform-as-a-Service?
\item \tikzmark{infrastructure}{Infrastructure-as-a-Service}
\item Other-stuff-as-a-Service?
\end{itemize}
\pause\tikz[overlay,remember picture]{\draw[draw=red,thick,double,fill opacity=0.2] ($(infrastructure)+(-0.5,0.4)$) rectangle ($(infrastructure)+(6,-0.2)$);}
\end{frame}
\end{document}
答え2
別のアプローチとしては、TikZ ノードを使用した Beamer でのハイライト表示。
コード:
\documentclass{beamer}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xparse}
\tikzset{
invisible/.style={opacity=0,text opacity=0},
visible on/.style={alt=#1{}{invisible}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
},
}
\tikzset{
background fill/.style={fill=#1},
background fill/.default={white},
fill on/.style={alt=#1{}{background fill}},
}
\tikzset{
background draw/.style={draw=#1},
background draw/.default={white},
draw on/.style={alt=#1{}{background draw}},
}
\tikzset{
background filldraw/.style args={#1 filled by #2}{draw=#1, fill=#2},
background filldraw/.default=white filled by white,
filldraw on/.style={alt=#1{}{background filldraw}},
}
\tikzset{highlighting/.style={
append after command={
\pgfextra{
\path[rounded corners,
background draw=red,
draw on=<#1>,
overlay] ($(\tikzlastnode.south west)+(-0.015,-0.1)$) % to have some offset
rectangle ($(\tikzlastnode.north east)+(0.015,0.065)$);
}
}
}
}
\NewDocumentCommand{\highlight}{r<> m}{%
\tikz[baseline=(A.base)]
\node[highlighting=#1,
inner sep=0pt] (A) {#2};%
}
\begin{document}
\begin{frame}{Itemize with styles}
\begin{itemize}[<+->]
\item Software-as-a-Service?
\item Platform-as-a-Service?
\item \highlight<5>{Infrastructure-as-a-Service}?
\item Other-stuff-as-a-Service?
\end{itemize}
\end{frame}
\end{document}
結果:
コードに関する注意事項
作成された TikZ ノードは、オプション により多くのスペースを占有しませんinner sep=0pt
が、テキストの周囲の寸法が非常に狭いため、作成されたハイライト ボックスは周囲にいくらかのスペースを追加します (ライブラリにより作成されたオフセット経由calc
)。この余分なスペースによって配置が崩れるのを避けるために、overlay
ハイライト パスに オプションが導入されました。
これで、 の内部を何も変更せずにdocument
、さまざまなスタイルを選択することでさまざまな効果を得ることができます。
\tikzset{highlighting/.style={
append after command={
\pgfextra{
\path[rounded corners,
background fill=red!30, % filling
fill on=<#1>, % filling overlay specification
overlay] ($(\tikzlastnode.south west)+(-0.015,-0.1)$) % to have some offset
rectangle ($(\tikzlastnode.north east)+(0.015,0.065)$);
}
}
}
}
与える:
その間:
\tikzset{highlighting/.style={
append after command={
\pgfextra{
\path[rounded corners,
background filldraw=red filled by red!30, % border+filling
filldraw on=<#1>, % overlay specification
overlay] ($(\tikzlastnode.south west)+(-0.015,-0.1)$) % to have some offset
rectangle ($(\tikzlastnode.north east)+(0.015,0.065)$);
}
}
}
}
与える:
カスタマイズ可能なオフセット
この改良版では、オフセットを介して強調表示された領域をカスタマイズできます (hf-tikz
パッケージから借用したアイデア)。このオフセットは最終的には pgfkeys であり、その値はコマンドのオプション引数内で宣言する必要があります\highlight
。
\highlight<overlay specification>[offsets]{text}
何も指定されていない場合は[offsets]
、初期値が使用されます。
コード:
\documentclass{beamer}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xparse}
\tikzset{
invisible/.style={opacity=0,text opacity=0},
visible on/.style={alt=#1{}{invisible}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
},
}
\tikzset{
background fill/.style={fill=#1},
background fill/.default={white},
fill on/.style={alt=#1{}{background fill}},
}
\tikzset{
background draw/.style={draw=#1},
background draw/.default={white},
draw on/.style={alt=#1{}{background draw}},
}
\tikzset{
background filldraw/.style args={#1 filled by #2}{draw=#1, fill=#2},
background filldraw/.default=white filled by white,
filldraw on/.style={alt=#1{}{background filldraw}},
}
\pgfkeys{/highlight/.cd,
above right offset/.initial={0.015,0.065},
above right offset/.get=\aboverightoffset,
above right offset/.store in=\aboverightoffset,
below left offset/.initial={-0.015,-0.1},
below left offset/.get=\belowleftoffset,
below left offset/.store in=\belowleftoffset,
}
\tikzset{highlighting/.style={
append after command={
\pgfextra{
\path[rounded corners,
background filldraw=red filled by red!30,% border+filling
filldraw on=<#1>, % overlay specification
overlay] ($(\tikzlastnode.south west)+(\belowleftoffset)$) % to have some offset
rectangle ($(\tikzlastnode.north east)+(\aboverightoffset)$);
}
}
}
}
\NewDocumentCommand{\highlight}{r<> O{} m}{%
\pgfkeys{/highlight/.cd,#2}
\tikz[baseline=(A.base)]
\node[highlighting=#1,
inner sep=0pt] (A) {#3};%
}
\begin{document}
\begin{frame}{Itemize with styles}
\begin{itemize}[<+->]
\item Software-as-a-Service?
\item Platform-as-a-Service?
\item \highlight<5>{Infrastructure-as-a-Service}?
\item \highlight<6>[below left offset={-0.1,-0.2},above right offset={0.25,0.15}]{Other-stuff-as-a-Service}?
\end{itemize}
\end{frame}
\end{document}
結果: