사용자 정의 주제 상관 관계 다이어그램을 그리는 방법

사용자 정의 주제 상관 관계 다이어그램을 그리는 방법

사용자 지정 주제 상관 관계 다이어그램과 같은 대형 다이어그램을 만들어야 하는데 특정 작업을 수행할 수 없습니다. 이를 위해 Ti를 사용하겠습니다.케이지.

재료

성분은 다음과 같습니다:

  1. 제목. 할 말이 많지 않습니다.
  2. 주제. 이러한 객체를 생성하기 위해 다음의 소스 코드를 사용하겠습니다.이 매우 유용한 답변:

    주제 사진

  3. 큰 직사각형. 모든 직사각형은 과목이 그룹화되는 연도(레벨)를 나타냅니다.

    직사각형

  4. 화살표. 그들은 커리큘럼의 같은 연도 내의 과목과 심지어 다른 연도의 과목을 연관시킵니다.

    화살

물건이 어떻게 조립되는지

  1. 과목은 직사각형(연도 경력) 내에서 그룹화됩니다.
  2. 두 과목이 같은 해에 연관될 수도 있고 다른 연도에 연관될 수도 있습니다. 같은 학년의 과목들 간의 관계는 항상 나란히(왼쪽에 하나, 오른쪽에 하나) 있습니다.

내가 뭘 한거지

MWE:

\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=100cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{hyperref}
\usepackage{tikz}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }}, 
 }

\begin{document}

\thispagestyle{empty}   % To suppress page number

\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}

\noindent
\begin{Form}    % From https://tex.stackexchange.com/a/478346/152550
    \begin{tikzpicture}
        \path (0,0) pic (Geo)  {nonfillable subject={Subject}} (8.5cm,0) pic (Whatever)  {nonfillable subject={Subject}} (15cm,0) pic[draw=red] (Math)  {nonfillable subject={Math}};
        \draw[-latex] (Geo-Title) -- (Whatever-Title);
        \draw[-latex] (Whatever-Title) -- (Math-Title);
    \end{tikzpicture}
\end{Form}

\noindent
\begin{tikzpicture}
    \fill[fill=orange!30,rounded corners=50pt] (0,0) rectangle (11.5cm,-14cm) node[midway,align=center,font=\LARGE] {\bfseries Level $0$};
\end{tikzpicture}

\end{document}

내가 뭘 한거지

최종 결과

이것이 내가 원하는거야:

내가 원하는 것

이미지를 텍스트로 복사할 의무는 없지만 일부 주제와 일부 직사각형은 복사해야 합니다.

내가 필요한 것

  1. 직사각형의 수는 6과 사이에서 다양합니다 7(4개가 있는 마지막 이미지와는 다릅니다). 코드는 주제를 쉽게 추가할 수 있도록 최대한 단순해야 합니다.
  2. 각 직사각형에는 최대 수직 피사체가 있고 8최대 9각 직사각형에는 2수평 피사체가 있습니다.
  3. 현재 연도의 레이블은 위쪽 중앙에 위치해야 하며 중앙에는 위치하지 않아야 합니다.

    상단 중앙

  4. 직사각형과 직사각형 내의 주제는 왼쪽에 정렬된 내 MWE와 달리 수평 및 수직으로 중앙에 있어야 합니다. 간단히 말해서 모든 것이 중앙에 위치해야 합니다.

    모든 것은 중앙에 집중되어야 한다

  5. 모든 개체 사이에는 적절한 공간이 있어야 하며, 연도와 연도 사이의 공간이 가장 중요해야 합니다. 공간이 거의 없으면 화살표가 너무 가까워 문서가 보기 흉해지기 때문입니다. 참고로 제가 계산한 측정값(센티미터 단위)을 확인할 수 있습니다.

    내가 계산한 측정값

    연도(즉, 가장 큰 금액) 인 경우 7페이지 너비는 가 되며 (0.5+4.5+1.5+4.5+0.5+3)*7-(3)+(1+1)이는 와 같습니다 100.5cm. 높이를 계산하지는 않았지만 대략일 것입니다 20cm(세로 피사체의 최대 수를 고려 8/9).

    시트의 길이가 작을수록 훨씬 좋습니다., 그러나 다이어그램을 시각적으로 악화시키지 않습니다(왜냐하면 다이어그램을 형식에 맞게 조정하고 싶기 때문입니다 A4).

일어날 수 있는 마지막 일:

마지막으로 일어날 수 있는 일

(선택적 요구 사항)

화살표 색상을 자동화합니다. 각 주제에는 고유한 화살표 색상이 있습니다. "최종 결과"에서 볼 수 있듯이 과목별로 화살표가 많이 있으므로 총 과목 수를 전달하여 n색상 그라데이션을 n순서대로 나누는 명령을 갖는 것이 이상적입니다. 색상을 균질화합니다. 이것이 이상해 보인다면 화살표를 수동으로 색칠하는 데 문제가 없습니다.

감사해요!!

답변1

서신 후 이것은 세련된 버전입니다.

  1. pic노드뿐만 아니라 행렬에서도 s를 사용할 수 있습니다 . 이것은 여기서 많은 도움이 됩니다.
  2. 의 수평 및 수직 중심을 맞추려면 및 를 tikzpicture사용하면 됩니다 .\centering\vfill
  3. 사물의 모양은 일부 pgf 키와 스타일에 의해 결정됩니다. 이는 코드에 표시되어 있습니다.
  4. 아주 적은 수의 화살표만 추가했지만 이는 원칙적으로 어떻게 진행되는지 보여줍니다. 나는 이 화살표가 노드를 교차하는 것을 피하는 확실한 방법을 알지 못합니다.
  5. \begin{Form}...\end{Form}적절한 곳에 추가해야 합니다 . 나는 이것이 무엇에 관한 것인지 본질적으로 단서가 없습니다. 이번 포스팅은 Ti에 집중하겠습니다.케이Z 부분.

\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=50cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{globalvals}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }}, 
 manoooh/.style={column sep=-2cm,row sep=5mm}
 }

\begin{document}

\thispagestyle{empty}   % To suppress page number

\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}

\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
 % step 1: add the matrices, name them mat0, mat1 etc.
 \begin{scope}[local bounding box=matrices] 
  \matrix[manoooh] (mat0)  {
         \pic (A)  {nonfillable subject={Subject}}; & & 
         \pic (B)  {nonfillable subject={Subject}}; \\
         & \pic (C)  {nonfillable subject={Subject}}; & \\
         };
  \matrix[manoooh,right=of mat0] (mat1){
         \pic (D)  {nonfillable subject={Subject}}; \\ 
         \pic (E)  {nonfillable subject={Subject}}; \\
         \pic (F)  {nonfillable subject={Subject}}; \\ 
         \pic (G)  {nonfillable subject={Subject}}; \\ 
         };
  \matrix[manoooh,right=of mat1] (mat2)  {
         \pic (H)  {nonfillable subject={Subject}}; & & 
         \pic (I)  {nonfillable subject={Subject}}; \\
         & \pic (J)  {nonfillable subject={Subject}};  & \\
         \pic (K)  {nonfillable subject={Subject}}; 
         & &
         \pic (L)  {nonfillable subject={Subject}}; \\
         };
  \matrix[manoooh,right=of mat2] (mat3)  {
         & \pic (M)  {nonfillable subject={Subject}};  & \\
         \pic (N)  {nonfillable subject={Subject}}; & & 
         \pic (O)  {nonfillable subject={Subject}}; \\
         \pic (P)  {nonfillable subject={Subject}}; 
         & &
         \pic (Q)  {nonfillable subject={Subject}}; \\
         };
 \end{scope}
 \foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3       
 {\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath] 
 at (mat\X |-matrices.north) (L\X) {Level $\X$};
 \begin{scope}[on background layer]
  % the fit parameters determine the shape of the background rectangles
  \node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
  inner xsep=5mm,fill=orange!30,rounded corners=50pt](F\X){};
 \end{scope}}
 % now add the arrows 
 \foreach \X in {D,...,G}
 {\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\end{tikzpicture}

\vfill
\end{document}

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

관련 정보