tcolorbox 和 tikz 对齐(内框)

tcolorbox 和 tikz 对齐(内框)

使用 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,边界框在绘制线条的端点处被放大了一半的线宽,而
  • tcolorboxframe code没有效果在边界框上(结果的tcolorbox)。

最有可能的是grow sidewards by=<length><length> = - <half the frame line width>OP 需要的就是这个。它缩小了文本宽度,扩大了边界框(水平),从而保持总宽度不变。

相比@polyn 的回答,所有文本部分与框架之间的间距保持不变。

为了使边界框考虑到增加的高度frame code,可以另外使用enlarge top byenlarge 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}

在此处输入图片描述

相关内容