你好,请提供最小(Minimal)工作示例。
上面的代码明显有较多无关代码,且包含.bib文件,并无法保证别人复制后直接可运行。
同时,请使用markdown的围栏代码块语法;并善用预览功能,你的代码缺少转义符号\',另建议对于不方便透露的文字,请使用lipsum或zhlipsum`宏包填充假文。
你好,请提供最小(Minimal)工作示例。
上面的代码明显有较多无关代码,且包含.bib文件,并无法保证别人复制后直接可运行。
同时,请使用markdown的围栏代码块语法;并善用预览功能,你的代码缺少转义符号\',另建议对于不方便透露的文字,请使用lipsum或zhlipsum`宏包填充假文。
对STIX数学字体不太了解,但这个很有特色的小写z应该是来源于newtx的小写字母.我进行了如下测试
\usepackage{newtx}
$$
f(z) = \log z + \exp{(z^2-3z+2)}
$$
\usepackage{unicode-math}
%\setmathfont{XITS Math}%选其一
\setmathfont{STIX Math}
$$
f(z) = \log z + \exp{(z^2-3z+2)}
$$
最后另附上常用数学字体 from lshort
提问请务必提供出现上述情况的完整代码。
进行了一下尝试,使用zotero7导出包含上述文献的.bib文件后,并没有复现出你的问题.如有问题,请提供MWE(最小工作示例)包含多个文件,请务必上传.zip等压缩包文件。

\documentclass{ctexart}
\usepackage{lipsum,zhlipsum}
\bibliographystyle{abbrv}
\begin{document}
\lipsum[1]
我能吞下玻璃\cite{rigatos_nonlinear_2023}而不伤害身体\cite{ogulmus_development_2023}。
\lipsum[2-3]
\bibliography{reference}
\end{document}
参考文献页面表现正常

下面是我的MWE文件.
tmp-mwe.zip
fragile command)与健壮(robust command)命令该问题可谓是tse上最常被访问的问题之一,可见链接macros - What is the difference between Fragile and Robust commands? When and why do we need protect? - TeX - LaTeX Stack Exchange本部分的内容将总结自该回答。一个宏被处理的顺序是读入、展开(expand)、执行(execute)、输出。下面是定义:
脆弱命令(Fragile Command)指的是在被展开时行为不正常,而在被执行时可以正常实现的命令。“A fragile command is one that does not behave properly when expanded, but not executed.”与之相对的,健壮命令(Robust Command)是指在展开和执行时均可以正常实现的命令。
这样的脆弱命令要正确执行,需要保证【在下一个token被展开之前】,某些命令被正确地执行,而健壮命令不需要这点。这样的命令只能在 normal(interleaved)mode中正确执行,而在只进行展开而不执行expansion-only contexts的某些情况下将导致错误。
“But in certain circumstances, most notably when writing to a file, TeX only expands things without executing them (the result will most probably be (re-expanded and) executed later when TeX reads the file back)”在某些情况下(例如执行tableofcontents时),TeX将只展开而不执行宏,此后将其写入辅助文件.toc后再次读入,以便生成正确的目录。因此下面可以使用\section并通过观察对比.toc文件来区分。
关于展开与执行的一些细节比较:
Expansion v.s. Execution
input stream),意味着将改变TeX引擎下一步将读取到什么内容TeX引擎将对读取到的内容进行剩下的操作
\input是可以展开的,TeX将会插入其他文件的内容
\def和\kern命令由于均为TeX的原语(primitive),属于不可进一步展开的宏**\show \def > \def=\def. **\show \kern > \kern=\kern.
脆弱命令为什么会报错?这里直接借助回答里提供的例子来说明
\newcommand\foo[1]{\def\arg{#1}\ifx\arg\empty T\else F\fi}
%定义一个单参数命令`\foo`,当传入参数为空时返回`T`,否则返回`F`在正常的文本模式(normal context)中,\foo{} => T 而\foo{stuff} => F;在执行过程中TeX读入\def并尝试将其展开,发现其不可展开之后,将执行\def,这时TeX吞入并移除了作为命令\def参数的\arg{#1};进一步TeX吞入了\ifx命令,尝试展开后执行,执行的时候吞入并移除了其参数\arg\empty,最终按照条件判断的逻辑输出结果T或F;
而在只进行展开的模式(expand-only context)中,相信我们已经知道会发生什么了,在吞入\def并展开失败之后,并不会执行\def吞入下一个token\arg,此时\arg可能并未被定义,然后TeX将会raise an error msg;如果宏\arg已经被定义(例如\def\arg{\abc}),那么在这种只展开的模式内,使用\foo{}将会得到\def \abc{},这将重新定义宏\abc,而这种操作远不是我们想实现的效果,脆弱命令在expand-only context并没有那么稳健。
\protect命令的用法从一个Eureka大神给出的例子出发,下面是一个体现fragile command的例子
\documentclass[12pt]{article}
\newcommand{\testA}{testA}
\NewDocumentCommand{\testB}{}{testB}
\NewExpandableDocumentCommand{\testC}{}{testC}
\begin{document}
\tableofcontents
\section{\testA}
\section{\protect\testA}
\section{\testB}
\section{\testC}
\end{document}输出的.toc文件的结果形如:
\contentsline {section}{\numberline {1}testA}{1}{}%
\contentsline {section}{\numberline {2}\testA }{1}{}%
\contentsline {section}{\numberline {3}\testB }{1}{}%
\contentsline {section}{\numberline {4}testC}{1}{}%上述使用\newcommand命令定义的\testA不是protected宏,因此在\section内部会被直接展开结果为testA;而是用\protect命令“保护”了\testA后其不会被展开;使用NewDocumentCommand定义的\testB属于\protected宏,因此不会被展开;而使用NewExpandableDocumentCommand定义的\testC与\newcommnd的行为类似,均会在\section内部这一expand-only context中被展开,最后一起输出到.toc文件被二次读入后执行。在这种流程下,得到的\tableofcontents命令读入展开(但不执行)后写入.toc文件时是否展开上有所不同。
在LaTeX2e的源码source2e.pdf中\protect宏的工作原理如下:
\protect将会被展开至\relax,意味着什么事也不做\protect将意味着\noexpand,该命令将阻止下一个token的展开,因此也就是保护了下一个命令命令,让其不被展开。这正好fix了脆弱命令在只进行展开模式下的脆弱性。本部分部分参考自链接macros - When to use edef, noexpand, and expandafter? - TeX - LaTeX Stack Exchange,关于命令定义部分参考自The TeXBook chap20
\expandafter<token>:首先读取紧随其后的一个token,同时展开该token后的另一个token,同时将原先紧随其后的token添加到展开结果之前\noexpand<token>:展开的结果为被展开的token本身,但该token如果是一个【按照TeX展开规则一般要被展开的命令】,则其含义此时等同于\relax\csname<string>\endcsname:将<string>转换为宏\<string>,如果宏\<string>未被定义,则默认定义为\relax\string<token> :将token转换为字符记号本身\def:\def<cs><parameter text>{<replacement text>}意为将控制序列定义为<replacement text>的内容;\gdef等同于命令\global\def,这使得命令在编组外可用\edef:\edef<cs><parameter text>{<replacement text>}意为在定义\cs时先完全地展开<replacement text>再将其作为控制系列\cs的定义;\xdef等同于\global\edef\expanded是pdftex、xetex、luatex、uptex 等引入的,knuth tex、etex中都没有,其定义如下:
而查阅 The TeXBook中可以知道\message命令的定义如下(不需要双写##参数符号):
\message的行为与\edef类似, 完全展开所有参数后输出到终端, 唯一的区别是内部参数不需要双写(double)\expanded的行为与\message类似,这也与下文中e型展开不需要双写一脉相承下面学习一下上面链接中有关展开的小例子
\def\examplea{more stuff}
\def\exampleb{Some stuff First \expandafter\noexpand\csname examplea\endcsname}
\edef\examplec{Some stuff Second \expandafter\noexpand\csname examplea\endcsname}
\examplea %=> more stuff
\exampleb %=> Some stuff First
\examplec %=> Some stuff Second more stuff
%(使用\edef在定义时即展开了\expandafter,此时\noexpand组织了\expandafter的展开,最终保留了\relax\examplea)在LaTeX3中,关于展开有以下不同的参数类型(由于我对expl3的也不熟悉,在这里浅浅搬运并翻译一下interface3.pdf中关于展开参数的几种类型的介绍):

c型展开,意为csname,是一种完全展开,是N的变体(要求传入参数为一个token),类似于\csname<cmd string>\endcsname,该命令将会对其内的字符串内容构建作为命令名称后展开,常用于拼接命令字符串,或通过传入命令的字符串形式而直接使用该命令o型展开,与n类似,会读入一个token list的内容,但对其中的内容只进行一次展开x (exhaustive expansion,一展到底),同样地读入一个token list的内容,并将每一个参数递归地展开直至遇到不可展开的参数类型为止;与Plain-TeX的原语(primitive)中的命令\edef有相同的行为。当函数的参数带有x型参数时,该函数是不可展开的(not expandable)e型展开,e型展开在大多数情况下的行为与x型展开完全相同,但与此对应的是TeX原语中的\expanded命令。参数变量(通常是#)在被使用时不需要双写(doubled)。当函数使用e型参数时,该函数可能是可以展开的(expandable)f(full expansion),f和x型展开类似,均会对参数的宏进行递归展开,但会在展开至(遇到)第一个不可展开的 token 时停止。当传入的token list包含空格(space token)时,空格将会被吞下(gobble),并立刻停止,后面的内容保持不变,此后的其他空格也不会被移除。V 与v型参数意为变量的值(value of variable),该参数用于获取变量的内容而不用担心数据内在的TeX 结构。V型参数对应N类型,要求传入一个token(例如\foo:V \MyVariable); 而v型参数对应n类型,要求传入一个token list(例如\foo:v {MyVariable})【关于expl3的问题点: V型展开和其他类型的展开的区别是什么,何时需要使用V型展开,何时需要使用x/e/f型展开】\write,\csname \endcsname,以及\expandafter等命令均只会进行展开而不会执行
LaTeX3中关于f型展开/e型展开均不会进行执行操作,赋值操作也均不会生效
NewExpandableDocumentCommand的例子关于构造的问题,首先感谢一下交流群友Eureka给出的下面的例子:
\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\NewDocumentCommand\testA{m}{#1}
\NewExpandableDocumentCommand\testB{m}{#1}
\newcommand{\testC}[1]{#1}
\begin{document}
\begin{tikzpicture}
%\draw[\testA{orange}] (0,0)--(1,1); % fails
\draw[\testB{magenta}] (0,0)--(1,1); % works
\draw[\testC{cyan}] (0,0)--(1,0); % works
\end{tikzpicture}
\end{document}
% Thanks Eureka!由于在tikz的node命令选项(option)中的参数默认不会被展开,因此需要使用NewExpandableDocumentCommand才可正常使用(也可以直接使用\newcommand).
.toc测试展开方式的差异测试代码和效果如下
\documentclass[12pt]{article}
\newcommand\foo{April Fool!}
\NewDocumentCommand{\barr}{}{\foo\ Ahahaha!}
\NewDocumentCommand{\foobar}{}{\foo\ Ahaha! \barr}
\NewExpandableDocumentCommand{\expbarr}{}{\foo\ Ahaha!}
\NewExpandableDocumentCommand{\expfoobar}{}{\foo\ Ahaha! \barr}
\begin{document}
\tableofcontents
\section{\foo}
\section{\barr}
\section{\foobar}
\section{\expbarr}
\section{\expfoobar}
\end{document}
按照上面的回答,在正常的上下文中,读入、展开、执行、输出这四个将依次交替执行。上述代码在生成初次编译生成.toc文件写入时执行的是e型展开【问题点:哪里的文档对此有介绍咧(?)】,而由于NewDocumentCommand定义是的protected宏,并不会被e型展开展开,因此从结果来看,命令\barr和\foobar均不会被展开;而对于NewExpandableDocumentCommand定义的命令,由于其定义的宏不是protected宏,在写入.toc文件时执行e型展开则会被完全替换为宏的定义文本<replacement text>,这种替换也被称为“完全展开”。、
e型展开与\int和\flag对比下面尝试使用latex3来构造例子,可见下面的文件


待补充,希望路过的各位uu不吝赐教批评指正(😭😭😭)
还挖了好多坑的,我还是一个个开新的提问尝试一下能否解决,会把新的问题移到这里的
\section中使用\verb以及宏包fancyvrb提供的\Verb报错的原因…..protected宏和robust宏这一trick的实现,\protect与\protected的区别,以及cprotect宏包用法expl3中f型展开与e型展开吞空格的差异….interface3中提到的fully expandable functions与restricted expandable functions的区别与例
我测试了一下在zotero内导出Unimodality, log-concavity, real-rootedness and beyond这一文献,使用utf-8导出结果如下。

测试结果如下,可见其直接输入了带重音符号的字体标题,说明不同的生成bibtex文件的软件导出的结果是不一定一样的。如果你选择的不是utf-8导出,可能结果会有点区别,但是如果某工具生成.bib文件需要人工修改的话,那这个工具可能不那么好用。

前几日仿照你的做法封装的\ex命令,下面是一个可能的mwe和效果图.
\documentclass[b5paper, openany]{ctexbook}
\usepackage[left=12mm,right=12mm,top=20mm,bottom=30mm]{geometry}
\usepackage{xcolor}
\usepackage{lipsum,zhlipsum}
\usepackage[many]{tcolorbox}
\NewTotalTColorBox{\ex}{O{问题} o m}{
enhanced,breakable,
colframe = cyan!75!black,
fonttitle = \bfseries,
skin=bicolor,
colbacktitle=cyan!85!black,
colbacklower=cyan!85!black,
sharp corners=all,
boxed title style = {sharp corners},
attach boxed title to top left={xshift=0mm,yshift=0mm},
title=#1,
IfNoValueF={#2}{%
space to upper,
halign lower=flush right,
bottom=1mm,
height=2.8cm,
collower=red,
}
}{
#3
\IfNoValueF{#2}{%
\tcblower
#2
}
}
\begin{document}
\section{测试}
\ex{
\lipsum[1]
}
\ex[一个问题]{
\zhlipsum[2]
}
\ex[另一个问题][来源:\LaTeX\ Studio(2024)]{
\zhlipsum[8-10]
}
\end{document}
感觉这个代码不是人写的...\tl_gclear:N \l_tmp_combined_tl里面的变量根本没用上,应该是\g_combined_tl
问题的关键是变量\seq_new:N \g_infos_seq在两次赋值之间没有\seq_gclear,下面是修改过后调试版的mwe:
\documentclass{ctexart}
\usepackage{expl3} % 加载 expl3 宏包
\begin{document}
\ExplSyntaxOn
% 声明全局序列
\seq_new:N \g_infos_seq
% 声明两个令牌列表
\tl_new:N \g_info_tl
\tl_new:N \g_title_tl
% 定义一个新的令牌列表用于存储拼接结果
\tl_new:N \g_combined_tl
% 定义一个新命令,将两个令牌列表拼接并添加到序列中
% 这个\concat_and_add_to_seq:的逻辑应该是:
% 清空\g_combines_tl,合并两个token_list,最后转换为seq
\cs_new:Nn \concat_and_add_to_seq:
{
\tl_gclear:N \g_combined_tl
g_combined_tl~First~:\tl_use:N \g_combined_tl \par
% 将第一个令牌列表的内容赋值到新令牌列表
\tl_gset:Nx \g_combined_tl { \g_info_tl }
g_combined_tl~Second~:\tl_use:N \g_combined_tl \par
% 将第二个令牌列表的内容追加到新令牌列表
\tl_gput_right:Nn \g_combined_tl { \g_title_tl }
g_combined_tl~Third~:\tl_use:N \g_combined_tl \par
% 将拼接后的令牌列表推送到全局序列的右边
\seq_gput_right:NV \g_infos_seq \g_combined_tl
seq的输出结果: \seq_use:Nn \g_infos_seq {} \par
}
% 给两个令牌列表赋值
\tl_gset:Nn \g_info_tl {123}
\tl_gset:Nn \g_title_tl {456}
% 调用命令将拼接结果添加到序列中
\concat_and_add_to_seq:
\seq_use:Nn \g_infos_seq {\par}
\seq_gclear:N \g_infos_seq \par
% 给两个令牌列表赋值
\tl_gset:Nn \g_info_tl {abc}
\tl_gset:Nn \g_title_tl {def}
% 调用命令将拼接结果添加到序列中
\concat_and_add_to_seq:
% 显示序列的内容
\seq_use:Nn \g_infos_seq {\par}
\ExplSyntaxOff
\end{document}

有几个疑问:
1.为什么要手动实现而不考虑bibtex等专业的文献引用,使用文献管理软件导出.bib样式简单又高效.
2.你想要的答案是不是类似自定义一个环境,然后你可以用\Cite{xx1} \Cite{xx2}的形式在文末插入呢?是否要保留交叉引用?也许你应该将需求表述的更加清楚.
你还没学会 markdown 的代码块语法咩 md官方教程
下面是一个mwe和效果(注意标点符号不应该被放在$ $内部)
\documentclass[12pt]{ctexart}
\usepackage{amsmath}
\usepackage{xeCJKfntef}
\begin{document}
\uline{由于 $Y$ 中的加法是 $Y\times Y\rightarrow Y$ 的连续映射.因此,若 $x\ll y$ ,则存在 $x$ 的邻域 $U$ , $y$ 的邻域 $V$ 使得 $V-U\subseteq \operatorname{int}Y_+,$ 故$U<V$ .}
\end{document}
汇总一下群友的讨论,虽然比较高深我没弄特别懂....
在某一些简单的情况下,如果只要求在嵌套环境内使用\verb||的话,可以尝试使用fancyvrb中提供的\Verb命令.
如果只想要把抄录环境作为单独参数的话,可以考虑Eureka提出的使用expl3中的\str_set:Nn和\str_replace_all:Nnn函数,如下图中的YourVerb命令的定义. 同时还可以考虑鱼香肉丝没有鱼先生使用的xparse宏包中提供的v型参数,会将传入参数视为一个verbatim环境,但不可以嵌套在其他命令中.
(特别感谢@u19850 指出错误,一开始弄混了expl3中的V/v以及xparse中的V,没有亲自尝试)


确实发现新大陆了,xparse还支持这个v代表抄录环境.
Eureka大神还指出可以使用xsimverb宏包的\xsim_file_write_start:nx {\c_true_bool}{<filename>}把环境内容输出到外部文件,然后用\inputverb之类的命令读进来,如下这样做的话可以实现环境的嵌套.
% \RequirePackage{xsimverb}
\xsim_file_write_start:nx {\c_true_bool}{<file name>}
<content>
\xsim_file_write_stop:lshort实现的example样例环境定义如下,对于verbatim的封装使用到了\verbatim@processline,\verbatim@start等,我不懂(/(ㄒoㄒ)/~~)
\makeatletter
\newwrite\example@out
\newlength\savefboxrule
\newlength\savefboxsep
\edef\example@name{\jobname-example.aux}
\newenvironment{example}%
{\begingroup\@bsphack
\immediate\openout\example@out=\example@name
\let\do\@makeother\dospecials\catcode`\^^M\active
\def\verbatim@processline{\immediate\write\example@out{\the\verbatim@line}}%
\verbatim@start}%
{\immediate\closeout\example@out\@esphack\endgroup%
\trivlist\item\relax
\setlength{\savefboxrule}{\fboxrule}%
\setlength{\savefboxsep}{\fboxsep}%
\setlength{\fboxsep}{0.015\textwidth}%
\setlength{\fboxrule}{0.4pt}%
\fcolorbox[gray]{0}{0.95}{%
\begin{minipage}[c]{0.45\textwidth}%
\setlength{\fboxrule}{\savefboxrule}%
\setlength{\fboxsep}{\savefboxsep}%
\small\verbatiminput{\example@name}%
\end{minipage}%
}%
\hfill%
\fbox{%
\begin{minipage}[c]{0.45\textwidth}%
\setlength{\fboxrule}{\savefboxrule}%
\setlength{\fboxsep}{\savefboxsep}%
\setlength{\parskip}{1ex plus 0.4ex minus 0.2ex}%
\normalsize\input{\example@name}%
\end{minipage}%
}%
\endtrivlist
}
\makeatother以上只是作为聊天记录的保存marked
如果要在tcb内部实现插入代码的话,tcb提供了listings的功能(如下图所示),但是考虑到封装性此处的命令\Exercise似乎并不太好简单地嵌入verbatim的效果.

和题主要求的不是特别相关,前几天正好学习了\tikzmath的有关功能,也实现了九九乘法表...
下面是一个MWE的片段
%\usepackage{amsmath}
%\usepackage{tikz}
%\usepackage{xcolor}
%\usepackage{pgffor}
%\usetikzlibrary{math}
\begin{tikzpicture}
\tikzmath{
function paint_rectangle(\x,\y){
int \i,\j,\k;
for \i in {1,...,\x}{
for \j in {1,...,\y}{
\k = \i * \j;
if \i <= \j then{
{
\node [rectangle,
fill=green!30,
draw=green!60,
rounded corners
] at (2.5*\i,\j) {\i $\times$ \j $=$ \k};
};
}else{
{
\node [rectangle,
fill=violet!40,
draw=violet!80,
rounded corners
] at (2.5*\i,\j) {$\j \times \i=\k$};
};
};
};
};
};
\A = 6;
\B = 15;
paint_rectangle(\A,\B);
}
\end{tikzpicture}
@武汉-WHU-正寅 感谢大佬提供的链接
搬运 TSE 论坛的远古问题
不明白你想要的生效是什么意思?

似乎加上label选项即可.
下面是MWE和一个结合@深圳-Skyrmion提供的使用默认参数O的alternative solution.
\documentclass{ctexart}
\usepackage{xparse}
\usepackage{enumitem}
% 定义新的环境 ceshi,带有可选参数 o 和必要的内容参数 +b
% \NewDocumentEnvironment{ceshi}{o +b}{
% \IfNoValueTF{#1}{% 如果没有提供可选参数
% \begin{enumerate}
% #2
% \end{enumerate}
% }{% 如果提供了可选参数
% \begin{enumerate}[label=#1{\arabic*}]
% #2
% \end{enumerate}
% }
% }{}
\NewDocumentEnvironment{ceshi}{O{} +b}{
\begin{enumerate}[label=#1{\arabic*}]
#2
\end{enumerate}
}{}
\begin{document}
% 没有可选参数的 ceshi 环境
\begin{ceshi}
\item 这是一
\item 这是二
\item 这是三
\end{ceshi}
%使用可选参数 resume 的 ceshi 环境
\begin{ceshi}[ahahaha]
\item 这是新一
\item 这是新二
\item 这是新三
\end{ceshi}
\end{document}下次可以指明参考代码来自:参考链接
一个显而易见的问题是,这段代码出现了两次
虽然我水平不够不太能看得懂,但是我删去其中一段之后不会出现类似无限递归调用的情况了.
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}至于要不要保留空白,if True:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
\else
\phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}if False:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}下面是一个xelatex+texlive运行成功的mwe
\documentclass[12pt]{ctexart}
\usepackage{xparse,zhlipsum}
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
\newif\ifsolution
\solutiontrue %添加此句将输出答案,否则输出答案所需的空白
\begin{document}
设$f(x)$在$[0, 2]$上连续, 在$(0, 2)$内可导, 且$3f(0)=f(1)+2f(2)$, 证明: 存在存在$\xi \in (0, 2)$, 成立$f'(\xi)=0$.
\begin{solution}
这是问题的解答.
\zhlipsum[1]
\end{solution}
\begin{enumerate}
\item 第一题的题目
\begin{solution}
\zhlipsum[1]
\end{solution}
\item 第二题的题目
\begin{solution}
这是第二题的答案
\zhlipsum[8]
\end{solution}
\end{enumerate}
\end{document}
个人感觉是你对上面链接的使用没有理解的很好.
如有错漏(尤其是对于patch的那一段),请各位批评指正。
为什么不看文档,是不喜欢吗?


问 在tcolorbox 字数太多环境溢出