![如何从参数化环境构建快捷方式](https://linux22.com/image/400870/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%8F%82%E6%95%B0%E5%8C%96%E7%8E%AF%E5%A2%83%E6%9E%84%E5%BB%BA%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F.png)
我根据该社区现有的一些帖子定义了一个像这样的参数化的 tcolorbox 环境。
\documentclass{book}
\usepackage{xcolor}
\definecolor{maincolor}{HTML}{1A1279}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage[most]{tcolorbox}
\newtcolorbox{mycb}[1][calculator]{
breakable,enhanced,arc=0mm,colback=maincolor!5,colframe=maincolor!80,leftrule=12mm,%
overlay={
\node[anchor=north west,outer sep=2pt] at (frame.north west) {\includegraphics[width=8mm]{#1}};
}
}
\begin{document}
\lipsum[1]
\begin{mycb}
\lipsum[1]
\end{mycb}
\begin{mycb}[question]
\lipsum[1]
\end{mycb}
% \begin{mycbquestion}
% \lipsum[1]
% \end{mycb}
\end{document}
因此默认情况下它会使用我的计算器图像。我可以传递要使用的图片的名称。它工作正常。
我希望有一些“快捷方式”,这样我就不必为重复出现的案例输入一些图片的名称。例如可以用作环境 mycbquestion 和 mycbequation 的问题和方程式。
我应该怎么做才能不复制粘贴图片名称的定义?我不知道如何在环境中做到这一点。
问候,
吉姆
答案1
这是另一种解决方案,其中将尽可能多的所需样式定义为新的 tcolorboxes。为了节省一些输入,在 newtcolorbox 定义中定义并使用参数通用样式。如果您需要尚未定义的特定样式,您可以始终使用默认参数来调整设计(参见基于第二个框的第三个框)
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\tcbset{
myboxstyle/.style={
breakable,
enhanced,
sharp corners,
colback=red!5,
colframe=red!80,
leftrule=12mm,
overlay={\node[anchor=north west,outer sep=2pt] at (frame.north west) {\includegraphics[width=8mm]{#1}}; }
}
}
\newtcolorbox{mycalc}[1][]{
myboxstyle=example-image,
#1
}
\newtcolorbox{myAbox}[1][]{
myboxstyle=example-image-A,
#1
}
\newtcolorbox{myBbox}[1][]{
myboxstyle=example-image-B,
#1
}
\begin{document}
\begin{mycalc}
\lipsum[2]
\end{mycalc}
\begin{myAbox}[myboxstyle=example-image-C, colframe=green]
\lipsum[3]
\end{myAbox}
\end{document}
答案2
这够了吗?在这里,第二个环境repeatcb
使用来自的最新图像mycb
。或者,有一个环境,它使用特定的(经常使用的)图像mycbB
调用。mycb
\documentclass{book}
\usepackage{xcolor}
\definecolor{maincolor}{HTML}{1A1279}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage[most]{tcolorbox}
\def\mycbtext{}
\newtcolorbox{mycb}[1][example-image]{%
breakable,enhanced,arc=0mm,colback=maincolor!5,colframe=maincolor!80,leftrule=12mm,%
overlay={
\node[anchor=north west,outer sep=2pt] at (frame.north west) {%
\includegraphics[width=8mm]{#1}};}\gdef\recentcbimage{#1}%
}
\newenvironment{repeatcb}{\begin{mycb}[\recentcbimage]}{\end{mycb}}
\newenvironment{mycbB}{\begin{mycb}[example-image-b]}{\end{mycb}}
\begin{document}
\lipsum[1]
\begin{mycb}
\lipsum[1]
\end{mycb}
\begin{mycb}[example-image-a]
\lipsum[1]
\end{mycb}
\begin{repeatcb}
\lipsum[1]
\end{repeatcb}
\begin{mycbB}
\lipsum[1]
\end{mycbB}
\end{document}