我尝试了两种替代方法来定义我的盒子框架的宽度tcolorbox
。我mybox
使用命令定义了一个frame code
,并将其与命令的结果进行了比较boxrule=4pt
:
\documentclass[][1]{article}
\usepackage{lipsum}
\usepackage[skins]{tcolorbox}
\newtcolorbox{mybox}[1][]{empty,frame code={\draw[line width=4pt, gray!50] (frame.south east) rectangle (frame.north west);}}
\begin{document}
\begin{tcolorbox}[boxrule=4pt,sharp corners,colframe=gray!50,colback=white]
\lipsum[2]
\end{tcolorbox}
\begin{mybox}
\lipsum[3]
\end{mybox}
\end{document}
我期望得到相同的结果。但是, 定义的框frame code
稍大一些,并且超过了\textwidth
。
有没有办法定义框架,使得两种情况下的框架尺寸相同?
答案1
当\draw
使用命令时,线的中心点将位于您提供的坐标上。
因此,该选项frame code={\draw[line width=4pt, gray!50] (frame.south east) rectangle (frame.north west);}
将绘制一条 4pt 宽度的线,其左侧为 2pt frame.south east
,右侧为 2pt。由于和frame.south east
位于frame.nort west
的边界上\textwidth
,因此您的框比预期宽 4pt。
改变此行为的一个选项是根据边框线的宽度移动框架代码矩形的角。类似于 frame code={\draw[red, line width=2mm]([shift={(.5\pgflinewidth,-.5\pgflinewidth)}]frame.north west) rectangle ([shift={(-.5\pgflinewidth,.5\pgflinewidth)}]frame.south east);}
。
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{tcolorbox}[enhanced, sharp corners, boxrule=2mm]
\lipsum[2]
\end{tcolorbox}
\begin{tcolorbox}[enhanced, sharp corners, boxrule=2mm,
frame code={\draw[red, line width=2mm]([shift={(.5\pgflinewidth,-.5\pgflinewidth)}]frame.north west) rectangle ([shift={(-.5\pgflinewidth,.5\pgflinewidth)}]frame.south east);}]
\lipsum[2]
\end{tcolorbox}
\begin{tcolorbox}[enhanced, sharp corners, boxrule=2mm,
frame code={\draw[red, line width=2mm, opacity=.5](frame.north west) rectangle (frame.south east);}]
\lipsum[2]
\end{tcolorbox}
\end{document}
答案2
在以下输出中添加结果width=\linewidth-4pt,center
的定义mybox
,两个框的宽度相同,并且与文本宽度完全相同(红线表示文本块/边距):
\documentclass{article}
\usepackage{lipsum}
\usepackage[skins]{tcolorbox}
\newtcolorbox{mybox}[1][]{empty,frame code={\draw[line width=4pt, gray!50] (frame.south east) rectangle (frame.north west);}, width=\linewidth-4pt,center}
\begin{document}
\begin{tcolorbox}[boxrule=4pt,sharp corners,colframe=gray!50,colback=white]
\lipsum[2]
\end{tcolorbox}
\begin{mybox}
\lipsum[3]
\end{mybox}
\end{document}