
Eu criei um NewDocumentEnvironment
para imprimir seções formatadas de forma diferente para um problema e sua solução (e com um comentário opcional no título):
\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}
A saída é mostrada abaixo.
Idealmente, eu gostaria de obter o mesmo resultado usando \NewTColorBox
; no entanto, não consegui entender como incorporar os diferentes requisitos de formatação para a parte superior e inferior do corpo tcolorbox
e das condicionais. Gostaria de saber se alguém com mais experiência tcolorbox
poderia fornecer uma solução.
Responder1
Você não quer um ambiente, mas um comando. E você não precisa duplicar o código: apenas digite condicionalmente o argumento opcional, se fornecido, no local apropriado.
\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}
Talvez também seja possível com \NewTColorBox
, mas por que se preocupar?