텍스트 주변의 비머 오버레이 상자 - 올바른 방법인가요?

텍스트 주변의 비머 오버레이 상자 - 올바른 방법인가요?

나는 "작동하는" 것을 가지고 있지만 좀 더 우아한 해결책이 있는지 궁금합니다. 나는 비머에서 항목화한 후에 일부 텍스트를 상자에 넣기를 원하므로 이것이 내가 하고 있는 일입니다:

\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)을 사용자 정의할 수 있습니다. 이 오프셋은 궁극적으로 명령의 선택적 인수 내에서 값을 선언해야 하는 pgfkey입니다 \highlight.

\highlight<overlay specification>[offsets]{text}

no를 [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}

결과:

여기에 이미지 설명을 입력하세요

관련 정보