使用 tikzpicture 和 tcolorbox,左侧的对齐方式并不相同。如果仔细观察,tcolorbox 会比 tikz 稍微靠左一点。有什么对齐它们的建议吗?我不想改变 tikz。我希望 tcolorbox 的起始位置与 tikz 的起始位置相同。
这可能是因为 tcolorbox 制作了“外框”而不是“内框”。但我不知道如何修复它。
Tikz:
\begin{tikzpicture}
\draw[color=black!30!,line width=0.3mm] (0,0.6)--(17.6,0.6);
\fill [fill=black!30!] (0,0)--(1.7,0)--(1.7,0.6)--(0,0.6)-- cycle;
\end{tikzpicture}}
\vspace*{-6mm}
\hspace*{2mm}\textcolor{white}{\textbf{Lösung #1}}
颜色盒:
\begin{tcolorbox}[%
width=100mm,boxrule=0mm,boxsep=0mm,box align=top,enhanced,interior hidden,left=2mm,right=2mm,top=0mm,bottom=2mm,%
frame code={
\draw[line width=0.3mm,color=black!30!] (frame.north west) -- (frame.north east) -- (frame.south east) -- (frame.south west) -- cycle;
}
]
Text in tcolorbox
\end{tcolorbox}
谢谢!
答案1
关键的区别是,
- 在 中
tikz
,边界框在绘制线条的端点处被放大了一半的线宽,而 - 在
tcolorbox
,frame code
有没有效果在边界框上(结果的tcolorbox
)。
最有可能的是grow sidewards by=<length>
,<length> = - <half the frame line width>
OP 需要的就是这个。它缩小了文本宽度,扩大了边界框(水平),从而保持总宽度不变。
相比@polyn 的回答,所有文本部分与框架之间的间距保持不变。
为了使边界框考虑到增加的高度frame code
,可以另外使用enlarge top by
和enlarge bottom by
。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{tikz}
\tcbuselibrary{skins}
\begin{document}
\setlength{\parindent}{0pt}
\setlength{\parskip}{5pt}
\newlength{\myframewidth}
\setlength{\myframewidth}{5pt} % by default, tikz line width is 0.4pt
\begin{tcolorbox}[%
width=100mm,
enhanced,interior hidden,
grow sidewards by=-.5\myframewidth,
frame code={
\draw[line width=\myframewidth,color=black!30!]
(frame.north west) rectangle (frame.south east);
},
show bounding box, % just for debugging
]
enlarge only horizontally
\end{tcolorbox}
\begin{tcolorbox}[%
width=100mm,
enhanced,interior hidden,
grow sidewards by=-.5\myframewidth,
enlarge top by=.5\myframewidth,
enlarge bottom by=.5\myframewidth,
frame code={
\draw[line width=\myframewidth,color=black!30!]
(frame.north west) rectangle (frame.south east);
},
show bounding box, % just for debugging
]
enlarge both horizontally and vertically
\end{tcolorbox}
\begin{tcolorbox}[width=100mm]
simple tcolorbox with \texttt{width=100mm}
\end{tcolorbox}
\leavevmode
\smash{\llap{\rule{.2pt}{5cm}}}%
\rule{100mm}{.5pt}%
\smash{\rlap{\rule{.2pt}{5cm}}}
\end{document}
答案2
也许下面的图片会对你有帮助(0.15mm是线粗细的一半)
\documentclass[a4paper]{article}
\usepackage[showframe,margin=1cm]{geometry}
\usepackage{tikz}
\usepackage[most]{tcolorbox}
\setlength{\parindent}{0pt}
\begin{document}
\begin{tikzpicture}
\fill [fill=black!30] (0,0)--(1.7,0)--(1.7,0.6)--(0,0.6)-- cycle;
\draw[color=red,line width=0.3mm] (0,0.6)--(17.6,0.6);
\end{tikzpicture}
\vspace{-6mm}
\hspace*{2mm}\textcolor{white}{Text}
\bigskip
\begin{tikzpicture}% align in left margin
\fill [fill=black!30] (-0.15mm,0)--(1.7,0)--(1.7,0.6)--(-0.15mm,0.6)-- cycle;
\draw[color=red,line width=0.3mm,line cap=rect] (0,0.6)--(17.6,0.6);
\end{tikzpicture}
\vspace*{-6mm}
\hspace*{2mm}\textcolor{white}{Text}
\bigskip
\begin{tcolorbox}[%
width=100mm,boxrule=0mm,boxsep=0mm,box align=top,enhanced,interior hidden,left=2mm,right=2mm,top=0mm,bottom=2mm,%
frame code={
\draw[line width=0.3mm,color=black!30!] (frame.north west) -- (frame.north east) -- (frame.south east) -- (frame.south west) -- cycle;
}
]
Text in tcolorbox
\end{tcolorbox}
\bigskip
\begin{tcolorbox}[% align in left margin
width=100mm,boxrule=0mm,boxsep=0mm,box align=top,enhanced,interior hidden,left=2mm,right=2mm,top=0mm,bottom=2mm,%
frame code={
\draw[line width=0.3mm,color=black!30!] ([xshift=0.15mm]frame.north west) -- (frame.north east) -- (frame.south east) -- ([xshift=0.15mm]frame.south west) -- cycle;
}
]
Text in tcolorbox
\end{tcolorbox}
\end{document}