如何从参数化环境构建快捷方式

如何从参数化环境构建快捷方式

我根据该社区现有的一些帖子定义了一个像这样的参数化的 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}

在此处输入图片描述

相关内容