Условный \NewTColorBox с различными параметрами для tcblower

Условный \NewTColorBox с различными параметрами для tcblower

Я создал NewDocumentEnvironmentдля печати по-разному отформатированных разделов для задачи и ее решения (и с необязательным комментарием к названию):

\documentclass[10pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{geometry}
 \geometry{
 a4paper,
 total={170mm,257mm},
 left=20mm,
 top=20mm,
 }
\usepackage{parskip}
\usepackage{tcolorbox}
\usepackage{lipsum}
\tcbuselibrary{skins,xparse,breakable}

\newcounter{problem}

\NewDocumentEnvironment{newprob}{o m +m}
{ % beginning code
    \refstepcounter{problem}
    \IfNoValueTF{#1}{ % start of true statement
    \begin{tcolorbox}[skin=bicolor,
    breakable,
    title=\textbf{Problem~\theproblem:},
    colframe=black!50!white,
    colback=black!20!white,
    colbacklower=black!5!white]
    {#2}    
    \tcblower\vskip-\baselineskip
    \tcbsubtitle[before skip=0pt]%
    {\textbf{Solution:}}
    {#3}
    \end{tcolorbox}
    } % end of true statement
    { % start of false statement
    \begin{tcolorbox}[skin=bicolor,
    breakable,
    title=\textbf{Problem~\theproblem:}~(#1),
    colframe=black!40!white,    
    colback=black!20!white,
    colbacklower=black!5!white]
    {#2}    
    \tcblower\vskip-\baselineskip
    \tcbsubtitle[before skip=0pt]%
    {\textbf{Solution:}}
    {#3}
    \end{tcolorbox} 
    } % end of false statement
}  %end code

\begin{document}
\begin{newprob}
    {
        This is one problem...
    }
    {
        ... and this is one answer.
    }
\end{newprob}

\begin{newprob}[special]
    {
        This is a speacial problem...
    }
    {
        ... and this is a special answer.
    }
\end{newprob}

\end{document}

Результат показан ниже.

введите описание изображения здесь

В идеале я хотел бы достичь того же результата с помощью \NewTColorBox; однако я не смог понять, как включить различные требования к форматированию для верхнего и нижнего тела tcolorboxи условных выражений. Интересно, может ли кто-то с большим опытом tcolorboxпредоставить решение.

решение1

Вам нужна не среда, а команда. И вам не нужно дублировать код: просто условно наберите необязательный аргумент, если он задан, в соответствующем месте.

\documentclass[10pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{geometry}
 \geometry{
 a4paper,
 total={170mm,257mm},
 left=20mm,
 top=20mm,
 }

\usepackage{tcolorbox}
\tcbuselibrary{skins,xparse,breakable}

\newcounter{problem}

\NewDocumentCommand{\newprob}{o +m +m}{%
  \refstepcounter{problem}
  \begin{tcolorbox}[
    skin=bicolor,
    breakable,
    title=\textbf{Problem~\theproblem:}\IfValueT{#1}{~(#1)},
    colframe=black!50!white,
    colback=black!20!white,
    colbacklower=black!5!white
  ]{#2}%
    \tcblower\vskip-\baselineskip
    \tcbsubtitle[before skip=0pt]%
    {\textbf{Solution:}}{#3}
  \end{tcolorbox}
}

\begin{document}

\newprob
    {
        This is one problem...
    }
    {
        ... and this is one answer.
    }

\newprob[special]
    {
        This is a speacial problem...
    }
    {
        ... and this is a special answer.
    }

\end{document}

Возможно, это возможно и с \NewTColorBox, но зачем?

введите описание изображения здесь

Связанный контент