
У меня есть следующий MWE, который я хотел бы использовать как своего рода дорожную карту для презентации защиты. В основном все работает и выглядит хорошо, но есть две вещи, которые я не знаю, как исправить. Первое — как сделать так, чтобы узлы появлялись точно друг над другом, так, например, начальная точка справа от Dissertation была бы одинаковой для всех трех путей, исходящих оттуда. Вторая проблема — как сделать так, чтобы круг внутри каждого узла имел ту же непрозрачность, что и линия и заливка.
\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{pgfplots}
\usetikzlibrary{ arrows
, positioning
, calc
, arrows.meta
, shapes
, snakes}
\colorlet{Navyblue}{NavyBlue}
\tikzstyle{project} = [
align=left
%, fill=NavyBlue
, opacity=0.2
, text opacity=1]
\newcommand{\myopacity}{1}
\begin{document}
\begin{tikzpicture}[baseline=(current bounding box.center), font=\sffamily, node distance=2cm]
\draw
node[project,anchor=east](P) {\textbf{Dissertation}}
node[project
,right= 2in of P.east
, anchor=east
, text opacity=0.4](P23) {}
node[project
, above= of P23.west
, anchor = west
](P1) {\textbf{Project I:}}
node[project
, right = 1in of P23
, text opacity=0.4](P2) {Project II: }
node[project
, below= 0.5in of P2.west
, anchor=west
, text opacity=0.4](P3) {Project III: }
node[project
, below= of P23.west
, anchor=west
, text opacity=0.4](P4) {Project IV:};
% Define different colors
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = 0.4] (P.east) -- (P23.west);
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, darkgray
, opacity = 0.4] (P23.east) -- (P2.west);
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, darkgray
, opacity = 0.4
] (P23.east) -- (P3.west);
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = \myopacity] (P.east) -- (P1.west);
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, RoyalBlue
, opacity = 0.4] (P.east) -- (P4.west);
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = \myopacity] (P.east) -- (P1.west);
\end{tikzpicture}
\end{document}
решение1
Вместо того, чтобы размещать тексты в узлах:node[project,anchor=east](P) {\textbf{Dissertation}}
Я размещаю их как метку. Метки — это узлы, они имеют те же опции, что и узлы, и могут быть изменены таким же образом:node[project,anchor=east,label={left:\textbf{Dissertation}}](P) {}
Это позволит вам рисовать круглые узлы:
\tikzset{project/.style={ align=left
%, fill=NavyBlue
, opacity=0.2
, text opacity=1
,draw %draw a circle node
,circle}
}
Это упрощает код рисования линии между узлами. Последние соединяют пустые узлы и нет необходимости указывать позицию P.east
или P23.west
рисовать их концы в круге, как:{Circle[length=8pt]}-{Circle[length=8pt]}
\draw[{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = 0.4] (P.east) -- (P23.west);
Код становится следующим:
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = 0.4] (P) edge (P23);
Я прокомментировал все строки кода, которые стали бесполезными, не удаляя их.
Я создал новый узел (P23')
:
node[project
,right= 2in of P
%, anchor=east
, text opacity=0.4](P23) {}
node[project
,right= 10pt of P23
%, anchor=east
, text opacity=0.4](P23') {}
\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{pgfplots}
\usetikzlibrary{ %arrows
, positioning
, calc
, arrows.meta
, shapes
, snakes}
\colorlet{Navyblue}{NavyBlue}
\tikzset{project/.style={
align=left
%, fill=NavyBlue
, opacity=0.2
, text opacity=1
,draw
,circle}}
\newcommand{\myopacity}{1}
\begin{document}
\begin{tikzpicture}[%baseline=(current bounding box.center),
font=\sffamily,
node distance=2cm]
\draw
node[project,anchor=east,label={left:\textbf{Dissertation}}](P) {}
node[project
,right= 2in of P
%, anchor=east
, text opacity=0.4](P23) {}
node[project
,right= 10pt of P23
%, anchor=east
, text opacity=0.4](P23') {}
node[project
, above= of P23
%, anchor = west
, label= right:\textbf{Project I:}
](P1) {}
node[project
, right = 1in of P23
, text opacity=0.4
,label=right:Project II: ](P2) {}
node[project
, below= 0.5in of P2
% , anchor=west
, text opacity=0.4,label=right:Project III: ](P3) {}
node[project
, below= of P23
%, anchor=west
, text opacity=0.4
,label=below:Project IV:](P4) {};
% Define different colors
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = 0.4] (P) edge (P23);
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, darkgray
, opacity = 0.4] (P23') -- (P2);
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, darkgray
, opacity = 0.4
] (P23') -- (P3);
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = \myopacity] (P) -- (P1);
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, RoyalBlue
, opacity = 0.4] (P) -- (P4);
\draw[%{Circle[length=8pt]}-{Circle[length=8pt]}
, line width=2pt
, Gray
, opacity = \myopacity] (P) -- (P1);
\end{tikzpicture}
\end{document}