网上抄了个定理环境,在mwe中,导言区用\NewTColorBox
创建了一个3个参数的彩色盒子theobox
,参数#1是title的内容,参数#2是title的前缀,也就是定理环境名,参数#3我不明白是什么意思,看上去是来自tcolorbox封装的xparse命令。
我的想法是:
考点\thesection\kern1em<#1,标题的内容>
。但是如果我不改变参数的数量为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文件。
我想这是你想要的...其实没必要在tcb外面封装成amsthm(这让代码变得很不优雅,既然amsthm要套tcb),tcb
本身也支持计数器的使用,著名的elegantbook模板的fancy样式对定理环境的实现也只是纯tcolorbox
。我同时还把mwe更精简了一丢丢...
P.S. xparse
已经进入latex kernel
,因此不需显式调用。你可以texdoc xparse
看看参数,lshort-zh-cn
其实有简单的介绍,所谓的\NewTColorBox
也不过是tcb
版本的newenvironment
而已。
\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}
你可以把
\quad
改成你想要的\kern1em
,忘记这点了...@u70550 想问一下
varwidth
这个宏包在mwe中的作用@u101077 我不是很懂这个宏包(上一次见是在这里),也许你可以自己探索一下,大致是调整环境宽度之类的(戳手手)
在tcb中,可见下图文档介绍:
@u70550 还想问一个问题,就是这个
thembox
环境的自动计数器选项auto counter
要怎么用\addtocounter{cnt}{num}
这个命令手动增加编号的数值呢?因为我用相同的定义,除了修改颜色和标题前缀“考点”,定义了一个新的相似环境,但是我想让计数器在同一个section
里继承前一个theobox
的计数器值,可我不知道他的计数器名字叫什么。@u101077 我建议你另开一个问题,同时更准确点说明你的需求,如果我没理解错的话,我感觉你似乎可以增加一个参数,然后用同一个tcb环境。
我指的是用同一个
tcb
环境,然后暴露出<titlename>
和<color>
作为#2
,#3
也能实现一样的效果(?)在
elegant
模板的v4.5
中,如果我没记错的话还提供了usesamecnt
的选项,我感觉与你的需求也有点类似的样子,可以去看看实现方法...而且“但是我想让计数器在同一个section里继承前一个theobox的计数器值,可我不知道他的计数器名字叫什么”我感觉思路不是很好,这两个相似环境理应是并列关系,何来A的定义要用到B的计数器而反之不然呢?如果又需要添加第三个,第四个呢,感觉代码会写的很冗乱?又翻了一下tcb的文档,存在
use counter from=⟨tcolorbox⟩
的选项,不需要知道计数器的名称。