把3个参数的tcolorbox和newdocumentenvironment换成2个参数

发布于 2024-12-21 19:47:40

网上抄了个定理环境,在mwe中,导言区用\NewTColorBox创建了一个3个参数的彩色盒子theobox,参数#1是title的内容,参数#2是title的前缀,也就是定理环境名,参数#3我不明白是什么意思,看上去是来自tcolorbox封装的xparse命令。

我的想法是:

  1. 参数#2是不必要的,因为我的正式文档中只需要“考点”这两个字,而title的展现形式为考点\thesection\kern1em<#1,标题的内容>。但是如果我不改变参数的数量为2个,那么我每次就都要输入三个参数,而第二个参数只能用{考点},这样很麻烦。
  2. 直接把
IfNoValueTF={#1}{title=#2~\thetheorem.}{title=#2~\thetheorem\kern1em~#1},
IfNoValueTF={#3}{}{#3}%第三个参数省略- NoValue -返回

里面的#2换成考点两个字,会让我每次输入一个空分组来表示第二个参数,这样很不直观,且容易出错。

所以我希望能把3个参数的盒子theobox和3个参数的环境theorem都换成2个参数,也就是让原来的参数#2消失,保留作为标题的内容和盒子的内容的两个参数#1和#3。这样我只需要输入标题的内容和盒子的内容就可以了。

下面是mwe文件。

mwe241221.tex

查看更多

关注者
0
被浏览
170
1 个回答
Sagittarius Rover
我要成为TikZ糕手/(ㄒoㄒ)/~~

我想这是你想要的...其实没必要在tcb外面封装成amsthm(这让代码变得很不优雅,既然amsthm要套tcb),tcb本身也支持计数器的使用,著名的elegantbook模板的fancy样式对定理环境的实现也只是纯tcolorbox。我同时还把mwe更精简了一丢丢...

P.S. xparse已经进入latex kernel,因此不需显式调用。你可以texdoc xparse看看参数,lshort-zh-cn其实有简单的介绍,所谓的\NewTColorBox也不过是tcb版本的newenvironment而已。

image.png

\documentclass[10pt]{ctexbook}
\usepackage[margin=1in,showframe]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{varwidth}
\usepackage{amsmath}
\usepackage{enumitem}
\setlist[enumerate]{leftmargin=1em}
\definecolor{mygreen}{RGB}{0,166,82}
\NewTColorBox[auto counter,number within=section]{theobox}{O{}}{% o省略可能的参数
  enhanced,frame empty,interior empty,
  coltitle=white,fonttitle=\bfseries,
  colbacktitle=mygreen,rounded corners,
  extras broken={frame empty,interior empty},
  borderline={0.25mm}{0mm}{mygreen},
  breakable,top=4mm,before skip=3.5mm,
  attach boxed title to top left={yshift=-3mm,xshift=5mm},boxed title style={boxrule=0pt,sharp corners=all},varwidth boxed title,
  title={考点\thetcbcounter\quad{#1}},
}
\newcommand*{\insertxt}{%
  \begin{enumerate}
    \item 素质教育以提高国民素质为根本宗旨。
    \item 素质教育是面向全体学生的教育。
    \item 素质教育是促进学生全面地、生动活泼地、可持续地发展的教育。
    \item 素质教育是促进学生个性发展的教育。
    \item 素质教育要着力提高学生的社会责任感、创新精神和实践能力。素质教育要着力提高学生的社会责任感、创新精神和实践能力。素质教育要着力提高学生的社会责任感、创新精神和实践能力。素质教育要着力提高学生的社会责任感、创新精神和实践能力。
  \end{enumerate}
}
\begin{document}
\chapter{你好}
\section{世界}
\begin{theobox}
  \insertxt
\end{theobox}
\begin{theobox}[有标题]
  \insertxt
\end{theobox}
\section{世界}
\begin{theobox}[有标题盒子]
  \insertxt
\end{theobox}
\begin{theobox}
  \insertxt
\end{theobox}
\chapter{你好}
\section{世界}
\begin{theobox}[有标题盒子]
  \insertxt
\end{theobox}
\begin{theobox}
  \insertxt
\end{theobox}
\begin{theobox}[有标题盒子]
  \insertxt
\end{theobox}
\begin{theobox}
  \insertxt
\end{theobox}
\end{document}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览