我希望输出一个行间的彩色盒子,盒子没有标题,盒子内容只含有与 section 绑定的计数器的数字,并且该盒子的编号也就是盒子内容可以作为标签在之后文章中可以引用如下
当我需要在某一段文字之前调用这个盒子时直接输入一个提前自定义的名称就能如上输出这个盒子,编号(也就是盒子的全部内容)按照 section 绑定显示,比如我把这个盒子的命令定义为
\dy
则以上效果只需输入如下代码就能显示:
\dy 这是一段文字
\dy 这是一段文字
\dy 这是一段文字
之后文章中还可以引用1.1 ,1.2...
大致就是这样的需求,我想到用 tcolorbox 或者其他盒子,或者用其他方式,请问一下该怎样实现?
有多种实现方式。可以用 xcolor
的 \fcolorbox
,也可以用 tcolorbox
。
\documentclass{ctexart}
\usepackage{xcolor}
% \usepackage{hyperref}
\definecolor{dyframecol}{HTML}{8080FF}
\definecolor{dybackcol}{HTML}{E6E6FF}
\newcounter{dycnt}
%% 第一种
\counterwithin{dycnt}{section}
\renewcommand{\thedycnt}{\arabic{section}.\arabic{dycnt}}
\newcommand{\dy}{\leavevmode\refstepcounter{dycnt}\nobreak
\fcolorbox[HTML]{8080FF}{E6E6FF}{\thedycnt}~}
%% 第二种
\usepackage{tcolorbox}
\newtcbox[use counter=dycnt, number within=section,
number freestyle=\noexpand\arabic{section}:\noexpand\arabic{dycnt}]
{\Dybox}[1][]
{colframe=dyframecol, colback=dybackcol,
boxrule=0.4pt, boxsep=0pt, left=3pt,right=3pt,top=3pt,bottom=3pt,
sharp corners, on line, after=~, #1}
% \tcbset{IfBlankF/.code n args={2}{\ifblank{#1}{}{\pgfkeysalso{#2}}}} % 如果比TeXLive2023旧,加上这个
\newcommand{\Dy}[1][]{\Dybox[IfBlankF={#1}{label={#1}}]{\thedycnt}\ignorespaces}
\begin{document}
\section{节}
\dy \label{dy:1}这是一段文字
\dy 这是一段文字 \ref{dy:4}
\Dy 这是一段文字 \ref{dy:1}
\Dy[dy:4] 这是一段文字
\end{document}
用法有一点点区别。但效果都是一样的。
谢谢大佬
大佬,我想再问一下,fcolorbox 的盒子边框尺寸,线条粗细可以设置吗
@u26254
\fboxrule
\fboxsep
分别设置线条粗细和内部间距。它也会影响\fbox
的粗细和间距。@u10307 谢谢