
Я создал 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
, но зачем?