tikz 노드의 itemize 환경에서 텍스트 조정

tikz 노드의 itemize 환경에서 텍스트 조정

tikz 노드의 itemize 환경에서 항목의 텍스트를 정렬하려고 합니다. 저도 Parameter를 사용해 보았는데 topsep생각대로 되지 않더군요. 모든 항목이 동일한 기준선에 있도록 텍스트는 모든 텍스트 상자의 텍스트 상자 위에 있어야 합니다. 아마도 tikz 노드의 상단, 중앙 또는 하단에 정렬하는 좋은 솔루션이 있을 수 있습니다.

코드는 다음과 같습니다.

\documentclass[tikz, class=scrreprt, fontsize=10pt]{standalone}
\usepackage[T1]{fontenc}                                
\usepackage[lf, p, sflf, sfp]{libertine}
\usepackage{enumitem}

\usetikzlibrary{shapes, arrows.meta, positioning, calc, decorations.pathreplacing, calligraphy, intersections, backgrounds}
\tikzset{every picture/.style={/utils/exec={\sffamily\normalsize}}}

\definecolor{orange}{RGB}{252,141,89}           % orange
\definecolor{yellow}{RGB}{253,204,138}          % gelb
\definecolor{light}{RGB}{254,240,217}           % hellgelb

\tikzstyle{framebox}     = [rectangle, minimum width = 20cm, minimum height = 1cm, draw = black, fill = orange]
\tikzstyle{renderbox}    = [rectangle, minimum width = 4cm, minimum height = 2cm, draw = black]
\tikzstyle{textbox}      = [rectangle, minimum width = 4cm, minimum height = 2cm, draw = black, fill = light, text width = 3.8cm]
\tikzstyle{titlebox}     = [rectangle, minimum height = 1cm]
\tikzstyle{subtitlebox}  = [rectangle, minimum width = 4cm, minimum height = 0.5cm, draw = black, fill = yellow]

\setlist[itemize]{itemsep = -0.3em, topsep = 0em, wide = 0.1em, labelwidth = 0em, label = \small{$\bullet$}}

\begin{document}
    \begin{tikzpicture}[node distance = 0cm and 3cm, outer sep = 0, inner sep = 0cm, rounded corners = 1pt, line width = 1pt, align = center] 
        
        \node [framebox, minimum width = 14cm, minimum height = 5cm] (subjektivbox) {};
        
        \node [titlebox, below = 0cm of subjektivbox.north, minimum width = 14cm] (subjektivtitel) {\raisebox{-9pt}{\textbf{subjektive Messverfahren}}};
        
        \node [renderbox, below right = 0cm and 0.5cm of subjektivtitel.south west] (renderbox1) {};
        \node [renderbox, below = 0cm of subjektivtitel.south]                      (renderbox2) {};
        \node [renderbox, below left = 0cm and 0.5cm of subjektivtitel.south east]  (renderbox3) {};
        
        \node [subtitlebox, below = 0cm of renderbox1.north] (merkmal)  {\textbf{merkmalsorientiert}};
        \node [subtitlebox, below = 0cm of renderbox2.north] (ereignis) {\raisebox{-9pt}{\textbf{ereignisorientiert}}};
        \node [subtitlebox, below = 0cm of renderbox3.north] (problem)  {\raisebox{-9pt}{\textbf{problemorientiert}}};
        
        \node [textbox, below = 0cm of merkmal] () {
            \begin{itemize}
                \item Kundenbefragungen
                \item Multiattribut
                \item Dekompositionell
        \end{itemize}};
        
        \node [textbox, below = 0cm of ereignis] () {
            \begin{itemize}
                \item Sequenzielle Ereignisse
                \item Critical Incidents
        \end{itemize}};
        
        \node [textbox, below = 0cm of problem] () {
            \begin{itemize}
                \item Problem Detecting
                \item Frequenz-Relevanz
        \end{itemize}};
        
    \end{tikzpicture}
\end{document}

답변1

text depth상단의 텍스트를 정렬하는 작업을 수행할 수 있습니다 . text depth=1.9cm스타일을 더했어요 textbox.

여기에 이미지 설명을 입력하세요

\documentclass[tikz, class=scrreprt, fontsize=10pt]{standalone}
\usepackage[T1]{fontenc}                                
\usepackage[lf, p, sflf, sfp]{libertine}
\usepackage{enumitem}

\usetikzlibrary{shapes, arrows.meta, positioning, calc, decorations.pathreplacing, calligraphy, intersections, backgrounds}
\tikzset{every picture/.style={/utils/exec={\sffamily\normalsize}}}

\definecolor{orange}{RGB}{252,141,89}           % orange
\definecolor{yellow}{RGB}{253,204,138}          % gelb
\definecolor{light}{RGB}{254,240,217}           % hellgelb

\tikzstyle{framebox}     = [rectangle, minimum width = 20cm, minimum height = 1cm, draw = black, fill = orange]
\tikzstyle{renderbox}    = [rectangle, minimum width = 4cm, minimum height = 2cm, draw = black]
\tikzstyle{textbox}      = [rectangle, minimum width = 4cm, minimum height = 2cm, draw = black, fill = light, text width = 3.8cm,text depth=1.9cm]
\tikzstyle{titlebox}     = [rectangle, minimum height = 1cm]
\tikzstyle{subtitlebox}  = [rectangle, minimum width = 4cm, minimum height = 0.5cm, draw = black, fill = yellow]

\setlist[itemize]{itemsep = -0.3em, topsep = 0em, wide = 0.1em, labelwidth = 0em, label = \small{$\bullet$}}

\begin{document}
    \begin{tikzpicture}[node distance = 0cm and 3cm, outer sep = 0, inner sep = 0cm, rounded corners = 1pt, line width = 1pt, align = center] 
        
        \node [framebox, minimum width = 14cm, minimum height = 5cm] (subjektivbox) {};
        
        \node [titlebox, below = 0cm of subjektivbox.north, minimum width = 14cm] (subjektivtitel) {\raisebox{-9pt}{\textbf{subjektive Messverfahren}}};
        
        \node [renderbox, below right = 0cm and 0.5cm of subjektivtitel.south west] (renderbox1) {};
        \node [renderbox, below = 0cm of subjektivtitel.south]                      (renderbox2) {};
        \node [renderbox, below left = 0cm and 0.5cm of subjektivtitel.south east]  (renderbox3) {};
        
        \node [subtitlebox, below = 0cm of renderbox1.north] (merkmal)  {\textbf{merkmalsorientiert}};
        \node [subtitlebox, below = 0cm of renderbox2.north] (ereignis) {\raisebox{-9pt}{\textbf{ereignisorientiert}}};
        \node [subtitlebox, below = 0cm of renderbox3.north] (problem)  {\raisebox{-9pt}{\textbf{problemorientiert}}};
        
        \node [textbox, below = 0cm of merkmal] () {
            \begin{itemize}
                \item Kundenbefragungen
                \item Multiattribut
                \item Dekompositionell
        \end{itemize}};
        
        \node [textbox, below = 0cm of ereignis] () {
            \begin{itemize}
                \item Sequenzielle Ereignisse
                \item Critical Incidents
        \end{itemize}};
        
        \node [textbox, below = 0cm of problem] () {
            \begin{itemize}
                \item Problem Detecting
                \item Frequenz-Relevanz
        \end{itemize}};
        
    \end{tikzpicture}
\end{document}

답변2

관심 사항이 상자 상자를 그리는 방법뿐이라면 tcolorbox패키지보다 간단하고 짧은 코드를 pure 로 제공합니다 tikz. 이 코드는 다음에서도 사용할 수 있습니다 tikzpicture.

\documentclass[border=3.141592, class=scrreprt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[lf, p, sflf, sfp]{libertine}
\usepackage{enumitem}
\usepackage{etoolbox}
\AtBeginEnvironment{tcolorbox}{%
\setlist[itemize]{nosep,
                 leftmargin=*,
                 label=\textbullet,
                 before=\begin{minipage}[t]{\linewidth}, % <---
                 after=\end{minipage}}                   % <---
                            }

\usepackage[most]{tcolorbox}
\tcbuselibrary{raster}
\newtcolorbox{OuterBox}{colback=orange!80, colframe=black,
                        sharp corners,
                        halign=center,  
                        }

\begin{document}
\begin{OuterBox}
    \textbf{Subjektive Messverfahren}\par\medskip%
\begin{tcbitemize}[%
        raster columns=3,
        raster equal height,
        before=,    after=\hfill,
        left=0pt,right=0mm,top=1mm,bottom=1mm,
        sharp corners,
        colframe=black, colback=yellow!30, colbacktitle=orange!40, 
        coltitle=black, fonttitle=\bfseries, center title, 
        after title=\vphantom{bg},
        halign=left]
\tcbitem[title=merkmalsorientiert]
    \begin{itemize}
\item Kundenbefragungen
\item Multiattribut
\item Dekompositionell
    \end{itemize}
%
\tcbitem[title=ereignisorientiert]
    \begin{itemize}
\item Sequenzielle Ereignisse
\item Critical Incidents
   \end{itemize}
%
\tcbitem[title=problemorientiert]
    \begin{itemize}
\item Problem Detecting
\item Frequenz-Relevanz
    \end{itemize}
    \end{tcbitemize}   
\end{OuterBox}
\end{document}

여기에 이미지 설명을 입력하세요

참고, 다음과 같이 노드 tcolorbox에 삽입할 수 있습니다 .tikz

\node [inner sep=0pt] at (<coordinate>) 
            {\begin{OuterBox}
                    % box code as above
             \end{OuterBox}
             };

필요한 경우 모든 상자에 이름을 지정할 수도 있습니다. 이를 위해서는 OuterBox 정의에 추가 enhanced, remember as=#1하고 Enhanced 에 tcbitemize오버레이하고 .\tcbitem[title<0...]\tcbitem[title=..., remeber as=<name>]

관련 정보