创建问题环境

创建问题环境

我正在尝试学习如何创建新环境,也就是说,我想为问题示例和解决这些问题的算法创建一个“问题环境”。理想情况下,我希望它使用类似打字机的字体,并在问题周围设置某种阴影框,类似于 Vazirani 的算法中的以下代码: 在此处输入图片描述

我真的不知道如何解决这个问题,目前我只是在研究命令\newenvironment,所以任何输入都会非常感激。理想情况下,我正在寻找一个有空间用于规范、算法和运行时分析的环境。

\documentclass{11pt}{article}
\begin{document}
\newenvironment{problem}[1][ ]{
\begin{tcolorbox}
\newcommand\given[1]{\fontfamily{cmtt}\selectfont\textbf{Given}: ##1\\ \\}
\newcommand{\goal}[1]{\fontfamily{cmtt}\selectfont\textbf{Goal}: ##1\\ \\}
\newcommand\discussion[1]{\fontfamily{cmtt}\selectfont\textbf{Discussion}: ##1\\ \\}
\newcommand\algorithm[1]{\fontfamily{cmtt}\selectfont\textbf{Algorithm}: ##1\\ \\}
\fontfamily{cmtt}\selectfont\textbf{Problem}: #1 \\
 }{\end{tcolorbox}\par}
\begin{problem}
\given{}
\goal{}
\discussion{}
\algorithm{}
\end{problem}
\end{document}

答案1

您的问题比较笼统,不太容易回答。

但我采用了您的 MWE,并按照您可能想要的方式对其进行了更改。我尽可能地将代码保持在与您的 MWE 接近的水平。特别是,许多字体设置都是多余的,但我保留了它们。

  • \newcommand如果没有特殊原因(例如环境参数的依赖性),我不会在环境内部添加。因此,我将这些命令移到了外部。

  • 的选项tcolorbox由键值列表给出。我做了一些设置,就像您提供的图片中那样。

代码如下:

\documentclass[11pt]{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\newcommand\given[1]{\par\noindent\fontfamily{cmtt}\selectfont\textbf{\sffamily Given}: #1\par\bigskip}
\newcommand{\goal}[1]{\par\noindent\fontfamily{cmtt}\selectfont\textbf{\sffamily Goal}: #1\par\bigskip}
\newcommand\discussion[1]{\par\noindent\fontfamily{cmtt}\selectfont\textbf{\sffamily Discussion}: #1\par\bigskip}
\newcommand\algorithm[1]{\par\noindent\fontfamily{cmtt}\selectfont\textbf{\sffamily Algorithm}: #1\par\bigskip}

\newenvironment{problem}[1][]{%
\begin{tcolorbox}[enhanced jigsaw,
  breakable,
  sharp corners,
  beforeafter skip=10pt,
  size=fbox,
  boxrule=0pt,
  frame hidden,
  colback=black!10
  ]
  \fontfamily{cmtt}\selectfont\textbf{\sffamily Problem}: #1 \par\bigskip
 }{\end{tcolorbox}\par}

\begin{document}
  \lipsum[5]

  \begin{problem}[My Problem]
  \given{\lipsum[1]}
  \goal{\lipsum[2]}
  \discussion{\lipsum[3]}
  \algorithm{\lipsum[4]}
  \end{problem}

  \lipsum[6]
\end{document}

在此处输入图片描述

第二步,我对这个例子做了一些修改,以帮助您进行自己的修改:

  • 我删除了多余的字体设置。

  • \newenvironment被更短的版本所取代\newtcolorbox,并且如果需要还可以提供一些额外的功能。

  • 添加了一些颜色。

  • 问题标题行放入具有title自身颜色的。

代码如下:

\documentclass[11pt]{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\newcommand\given[1]{\par\noindent\textbf{\sffamily Given}: #1\par\bigskip}
\newcommand{\goal}[1]{\par\noindent\textbf{\sffamily Goal}: #1\par\bigskip}
\newcommand\discussion[1]{\par\noindent\textbf{\sffamily Discussion}: #1\par\bigskip}
\newcommand\algorithm[1]{\par\noindent\textbf{\sffamily Algorithm}: #1\par\bigskip}

\newtcolorbox{problem}[1][]{enhanced jigsaw,
  breakable,
  sharp corners,
  beforeafter skip=10pt,
  size=fbox,
  boxrule=0pt,
  frame hidden,
  colback=blue!10,
  fontupper=\fontfamily{cmtt}\selectfont,
  fonttitle=\sffamily,
  colbacktitle=blue!50!black,
  title={\textbf{\sffamily Problem}: #1},
  top=3pt
}

\begin{document}
  \lipsum[5]

  \begin{problem}[My Problem]
  \given{\lipsum[1]}
  \goal{\lipsum[2]}
  \discussion{\lipsum[3]}
  \algorithm{\lipsum[4]}
  \end{problem}

  \lipsum[6]
\end{document}

在此处输入图片描述

相关内容