我正在尝试学习如何创建新环境,也就是说,我想为问题示例和解决这些问题的算法创建一个“问题环境”。理想情况下,我希望它使用类似打字机的字体,并在问题周围设置某种阴影框,类似于 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}