비머 색상을 기반으로 한 tcolorbox 정의 문제

비머 색상을 기반으로 한 tcolorbox 정의 문제

tcolorbox비머에서 사용되는 현재 색상 테마를 기반으로 색상을 선언하고 싶습니다 .

나는 다음과 같은 것을 시도했습니다.

colbacktitle=\usebeamercolor[bg]{block title alerted}

하지만 오류가 표시됩니다. 따라서 다음 코드로 관리했습니다.

\documentclass[t]{beamer}
\usecolortheme{rose}
\usepackage[most]{tcolorbox}

\newtcolorbox{myalertbox}[2][]{%
    code={%
        \usebeamercolor{block title alerted}
        \colorlet{titlebg}{bg}
        \colorlet{titlefg}{fg}
        \usebeamercolor{block body alerted}
        \colorlet{bodybg}{bg}
        \colorlet{bodyfg}{fg}
    },
    colbacktitle=titlebg, 
    coltitle=titlefg, 
    colback=bodybg,
    colupper=bodyfg,
    title=#2,
    boxrule=0pt,
    sharp corners,
    #1
}

\begin{document} 
\begin{frame}{Testing beamer colors in tcolorbox}

\begin{myalertbox}{Alert tcolorbox}
Some text
\end{myalertbox}

\begin{alertblock}{Beamer alert box}
Some text
\end{alertblock}

\end{frame}
\end{document}

생산하는

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

두 가지 질문:

  1. 왜 이 상자들은 서로 다른 색상을 나타냅니까?
  2. tcolorbox 정의에서 비머 색상을 사용하는 더 좋은 방법을 알고 있습니까?

답변1

문제는 배경색이 경고 색상과 배경의 혼합으로 정의된다는 사실과 관련이 있습니다 bg=alerted text.fg!20!bg. 이는 에 대한 문제인 것 같습니다 tcolourbox.

해결 방법으로 색상 정의에 white( 대신 )을 명시적으로 사용하십시오.bg

\documentclass[t]{beamer}
\usecolortheme{rose}
\usepackage[most]{tcolorbox}


\setbeamercolor{block title alerted}{use=alerted text,fg=alerted text.fg,bg=alerted text.fg!20!white}
\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!50!white}

\newtcolorbox{myalertbox}[2][]{%
    code={%
        \usebeamercolor{block title alerted}
        \colorlet{titlebg}{block title alerted.bg}
        \colorlet{titlefg}{block title alerted.fg}
        \usebeamercolor{block body alerted}
        \colorlet{bodybg}{block body alerted.bg}
        \colorlet{bodyfg}{block body alerted.fg}
    },
    colbacktitle=titlebg, 
    coltitle=titlefg, 
    colback=bodybg,
    colupper=bodyfg,
    title=#2,
    boxrule=0pt,
    sharp corners,
    #1
}

\begin{document} 
\begin{frame}{Testing beamer colors in tcolorbox}

\begin{myalertbox}{Alert tcolorbox}
Some text
\end{myalertbox}

\begin{alertblock}{Beamer alert box}
Some text
\end{alertblock}

\end{frame}
\end{document}

답변2

tcolorbox를 사용하여 비머 블록의 모양과 느낌을 복제하는 또 다른 방법은 새로운 tcolorbox 내부 테마(https://www.ctan.org/pkg/beamertheme-tcolorbox).

이 테마는 표준 비머 블록을 tcolorboxes로 대체하지만 이를 사용하여 자신만의 상자를 정의할 수도 있습니다.

\documentclass[t]{beamer}
\usecolortheme{rose}
\useinnertheme{tcolorbox}

\makeatletter
\newtcolorbox{myalertbox}[2][]{%
    code={%
      \beamer@tcb@colini[ alerted]
    },
    colback=beamer@tcb@bodybg,
    colbacktitle=beamer@tcb@titlebg,
    coltext=beamer@tcb@bodyfg,
    coltitle=beamer@tcb@titlefg,
    before title={\usebeamerfont{block title alerted}},
    before upper={\usebeamerfont{block body alerted}},    
    title=#2,
    #1
}
\makeatother

\begin{document} 
\begin{frame}{Testing beamer colors in tcolorbox}

\begin{myalertbox}{Alert tcolorbox}
Some text
\end{myalertbox}

\begin{alertblock}{Beamer alert box}
Some text
\end{alertblock}

\end{frame}
\end{document}

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

관련 정보