tcolorbox 与 TikZ 与 geometry:如何在 tcolorbox 下方放置适当的网格

tcolorbox 与 TikZ 与 geometry:如何在 tcolorbox 下方放置适当的网格

我想要在 DINA4 (210 × 297 [mm]) 纸张上创建以下内容:

  • 我需要约 2cm 边距向左和向右;在示例中,垂直边距变为 2.5 厘米。
  • 我需要一个带有总高6cm
  • 我想要一个网格2×2(厘米)宽度尽可能为正方形。

所以我选择

 \usepackage[    width=16cm,    height=26cm,    ]{geometry}

这应该允许我在宽度上有 8 个网格方块。

但为什么我的网格

% Grid:
\begin{tikzpicture}[every path/.style=red,
remember picture,overlay,]
\draw[step=2, shift={(Textbox)}] (0,0) grid +(\linewidth-0.0*\pgflinewidth,-8);
\end{tikzpicture}

变成角落看起来不好与 tcolorbox 不匹配(即使我选择line cap=rect)?我该怎么办?

顺便说一句:将网格也创建为 tcolorbox 会更好吗?

在此处输入图片描述

\documentclass[a4paper]{article} % DINA4 (210 × 297 [mm])
\usepackage[%showframe=true,
width=16cm,
height=26cm,
]{geometry}
\pagestyle{empty}

\usepackage{tikz}
\usetikzlibrary{calc} 
\usepackage[most]{tcolorbox}

\begin{document}
\begin{tcolorbox}[
height=6cm,
sharp corners,
enhanced, remember, finish={%
\draw[blue,ultra thick,latex-] (frame.south west) coordinate[label=135:X](Textbox)-- +(3,3) node[right]{Here to put on the grid.}; }
]
A text.
\end{tcolorbox}

% Grid:
\begin{tikzpicture}[every path/.style=red,
remember picture,overlay,]
\draw[step=2, shift={(Textbox)}] (0,0) coordinate(X) grid +(\linewidth-0.0*\pgflinewidth,-8);
\end{tikzpicture}
\end{document}

答案1

tcolorbox环境的宽度和的\draw grid确定方式有所不同。

  • 在一个tcolorbox环境中,它的总自然宽度正好是\linewidth。这里整个左规则和右规则都绘制在该宽度内。
  • 在 a 中\draw (0, 0) grid (1, 1);,它的总宽度为“1cm + 线宽”,因为 tikz 沿着路径以其中心绘制一条线。

就你的情况来说,

  • 因为需要绘制完整的网格,所以没有更改的余地\draw[..., line cap=rect] (0, 0) grid +(\linewidth, -8)
  • 然后,tcolorbox环境比网格窄了一半的网格线宽,无论是在左侧还是右侧。这就是你在问题评论

这是一个尝试,虽然不够优雅:

  • 将网格的线宽放大tcolorbox一半,左右两侧均如此。现在tcolorbox总宽度为“ \linewidth+ 网格线宽”,与以下网格相同。
  • 将网格水平移动网格线宽度的一半。
\documentclass[a4paper]{article} % DINA4 (210 × 297 [mm])
\usepackage[%showframe=true,
  width=16cm,
  height=26cm,
]{geometry}
\pagestyle{empty}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[most]{tcolorbox}

\begin{document}
\newlength{\gridlinewidth}
\setlength{\gridlinewidth}{.4pt} % default tikz line width

\begin{tcolorbox}[
  height=6cm,
  sharp corners,
  boxrule=10pt,
  grow sidewards by=.5\gridlinewidth,
  enhanced,
  remember, 
  finish={%
    \draw[blue,ultra thick,latex-] 
      (frame.south west) coordinate[label=135:X] (Textbox) -- +(3,3) 
        node[right] {Here to put on the grid.}; 
  }
]
  A text.
\end{tcolorbox}

% Grid:
\begin{tikzpicture}[
  every path/.style=red,
  remember picture, overlay
]
  \draw[step=2, shift={($(Textbox) + (.5\gridlinewidth, 0)$)}, line cap=rect] 
    (0, 0) grid +(\linewidth, -8);
\end{tikzpicture}
\end{document}

左边 在此处输入图片描述

右边 在此处输入图片描述

答案2

根据答案木子木志Z,我建议使用一个集成绘制网格的单个框的变体:

\documentclass[a4paper]{article} % DINA4 (210 × 297 [mm])
\usepackage[%showframe=true,
  width=16cm,
  height=26cm,
]{geometry}
\pagestyle{empty}

\usepackage{tikz}
\usepackage[most]{tcolorbox}

\begin{document}
\newlength{\gridlinewidth}
\setlength{\gridlinewidth}{.4pt} % default tikz line width

\begin{tcolorbox}[
  enhanced,
  height=6cm,
  sharp corners,
  boxrule=10pt,
  grow sidewards by=.5\gridlinewidth,
  enlarge bottom finally by=8cm+\gridlinewidth,
  finish={%
    \begin{scope}[shift={([xshift=0.5\gridlinewidth, yshift=-0.5\gridlinewidth]frame.south west)}]
    \draw[step=2, line cap=rect, red, line width=\gridlinewidth]
        grid +(\linewidth, -8);
    \end{scope}
  }
]
  A text.
\end{tcolorbox}

Text after box and grid.

\end{document}

在此处输入图片描述

如果网格的高度不是 8 厘米(4 个方格),则必须进行相应enlarge bottom finally by=8cm+\gridlinewidth,调整grid +(\linewidth, -8);

如果您的页面在框和网格之后不包含任何内容,则可以enlarge bottom finally by=8cm+\gridlinewidth,完全省略。

答案3

在新的 tcolorbox 中使用网格:

在此处输入图片描述

\documentclass[a4paper]{article} % DINA4 (210 × 297 [mm])
\usepackage[%showframe=true,
width=16cm,
height=26cm,
]{geometry}
\pagestyle{empty}

\usepackage{tikz}
\usetikzlibrary{calc} 
\usepackage[most]{tcolorbox}

\begin{document}
\begin{tcolorbox}[
height=6cm,
sharp corners,
after skip=0pt,
enhanced, remember, finish={%
\draw[blue,ultra thick,latex-] (frame.south west) coordinate[label=135:X](Textbox)-- +(3,3) node[right]{Here to put on the grid.}; },
]
A text.
\end{tcolorbox}

% Grid - old
%\begin{tikzpicture}[every path/.style=red,
%remember picture,overlay, %line cap=rect
%]
%\draw[step=2, shift={($(Textbox)+(0.5*\pgflinewidth,0)$)}] (0,0) coordinate(X) grid +(16cm-0.5*\pgflinewidth,-8);
%\end{tikzpicture}

% Grid - new
\begin{tcolorbox}[
height=8cm,
boxrule=0pt, %frame empty, 
sharp corners,
colback=white, 
before skip=0pt, after skip=0pt,
%
enhanced,
underlay={\begin{tcbclipinterior}
\draw[step=2, red, shift={(interior.north west)}
] (interior.south west) grid (interior.north east);
\end{tcbclipinterior}},
]
\end{tcolorbox}

\end{document}

相关内容