Прикрепить tikzpicture к другому tikzpicture

Прикрепить tikzpicture к другому tikzpicture

Почему этот красный прямоугольник не прикрепляется должным образом к прямоугольному заголовку?

  • Не используйте xshift или yshift.
  • Я хочу, чтобы этот заголовок располагался у верхнего поля, теперь между ними есть пустое пространство.
  • Не изменяйте «baseline=(headerbox.center)» в описании моего заголовка (чтобы текст был выровнен по центру). Используйте, например, «\node at (headerbox.north east)...», чтобы привязать к нему красный блок.

Цитата из блока

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,backgrounds}
\usepackage[left=2cm,top=2cm,right=2cm,bottom=2cm,showframe]{geometry}
\begin{document}
\newcommand{\newtab}[2]{%
    \begin{tikzpicture}[overlay]
        \node[inner sep=2mm,text=white] (#1) {#2};
        \begin{scope}[on background layer]
        \draw[fill=red]%
        ($(#1.north east)$)%
        --($(#1.north west)$)%
        --($(#1.south west)$)%
        -- ($(#1.south east)$)%
        -- cycle;%
        \end{scope}%
        \end{tikzpicture}% 
}%
\noindent\begin{tikzpicture}[rounded corners=0mm, outer sep=0pt,baseline=(headerbox.center)]%
\path node[rectangle,minimum width=\textwidth-\fboxrule,minimum height=3cm,draw=black,fill=white,inner xsep=0mm,inner ysep=0in](headerbox)%
{Headertekst}%
;%
\node at (headerbox.north east)[anchor=south east,inner sep=0pt, outer sep=0pt, line width=0cm] {\newtab{headerbox}{Labeltekst}};
\end{tikzpicture}\par Test%
\end{document}

Цитата из блокавведите описание изображения здесь

решение1

Добавьте корректировку вниз для половины ширины линии, если это имеет значение в вашем реальном документе. Я не вижу, чтобы вам нужны все библиотеки здесь, но все же.

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,backgrounds}
\usepackage[left=2cm,top=2cm,right=2cm,bottom=2cm,showframe]{geometry}
\begin{document}
  \newcommand{\newtab}[2]{%
    \begin{tikzpicture}[overlay]
      \node[inner sep=2mm,text=white] (#1) {#2};
      \begin{scope}[on background layer]
        \draw[fill=red]%
        ($(#1.north east)$)%
        --($(#1.north west)$)%
        --($(#1.south west)$)%
        -- ($(#1.south east)$)%
        -- cycle;%
      \end{scope}%
    \end{tikzpicture}%
  }%
  \noindent\begin{tikzpicture}[rounded corners=0mm, outer sep=0pt]%
    \path node[rectangle,minimum width=\textwidth-\fboxrule,minimum height=3cm,draw=black,fill=white,inner xsep=0mm,inner ysep=0in, anchor=north](headerbox) at (current page.north)
    {Headertekst}%
    ;%
    \node at (headerbox.north east)[anchor=south east,inner sep=0pt, outer sep=0pt, line width=0cm] {\newtab{headerbox}{Labeltekst}};
  \end{tikzpicture}\par Test%
\end{document}

вкладка

Я думаю, толщина линии отчасти является артефактом, а отчасти потому, что половина ширины линии находится выше линии, рисующей рамку вокруг текстовой области.

решение2

Я нашел решение:

  • «Чистый» код
  • \node[overlay], наложение важно в этом узле, в противном случае узел займет место, а заголовок сместится вниз.

Без этого (headerbox)в узле at (headerbox.north east)(headerbox) {Tekst};красный ящик не отображается. Не знаю почему, потому что (headerbox.north east)четко указывает, где я хочу разместить красный ящик. В любом случае, этот код работает нормально:

Цитата из блока

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usepackage{calc}
\usetikzlibrary{calc,backgrounds}
\usepackage[showframe]{geometry}
\begin{document}
\noindent\begin{tikzpicture}
\node at (0,0) [rectangle,minimum width=\textwidth-\fboxrule,minimum height=5cm,draw=black,fill=white,inner xsep=0mm,inner ysep=0in,rounded corners=0mm, outer sep=0pt,baseline=(headerbox.center)](headerbox){};%
\node[overlay,inner sep=2mm,text=white,anchor=south east] at (headerbox.north east)(headerbox){Tekst};%
\begin{scope}[on background layer]%
\draw[fill=red,overlay]%
($ (headerbox.north east) $)
--($ (headerbox.north west) $)
--($ (headerbox.south west) $)
--($ (headerbox.south east) $)
-- cycle;%
\end{scope};%
\end{tikzpicture}%
\end{document}

Цитата из блока

Связанный контент