Я пытаюсь нарисовать структуру Крипке в TikZ, и хотя по большей части мне это удается, я не совсем доволен результатом. Вот моя преамбула:
\documentclass[10pt,letterpaper]{amsart}
% Personal Packages
\usepackage{notation}
% TikZ Drawing packages
\usepackage{tikz}
\usetikzlibrary{arrows}
% Font and Typography Settings
\usepackage{concrete}
\usepackage{euler}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[babel=true]{microtype}
подпишитесь на мой MWE:
\begin{figure}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
thick,base node/.style={circle,draw}, real node/.style={double,circle,draw}]
\node[real node] (1) {$s(C)$};
\node[base node] (2) [below left of=1] {$s(\alpha)$};
\node[base node] (3) [below right of=1] {$\neg{s(\alpha)}$};
\path[]
(1) edge node[left] {$L,J$} (2)
edge node[right] {$L,J$} (3)
edge [loop above] node {$C$} (1)
(2) edge [bend left] node {$C,L,J$} (3)
edge [loop left] node {$C,L,J$} (2)
(3) edge [bend left] node {$C,L,J$} (2)
edge [loop right] node {$C,L,J$} (3);
\end{tikzpicture}
\caption{The initial state of the domain in Ex.~\ref{ex:whisper}.}
\end{figure}
Проблема в том, что узел 3
больше узла 2
(вероятно, потому что он меняет свой размер, чтобы вместить текст метки). Есть ли способ сделать все узлы одинаковыми по размеру? Также любые предложения о том, как сделать диаграмму более эстетически приятной, были бы очень признательны (я перешел из OmniGraffle, и переход немного сложен).
решение1
Вы можете использовать minimum size=
ключ:
\documentclass[10pt,letterpaper]{amsart}
% Personal Packages
%\usepackage{notation}
% TikZ Drawing packages
\usepackage{tikz}
\usetikzlibrary{arrows}
% Font and Typography Settings
\usepackage{concrete}
\usepackage{euler}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[babel=true]{microtype}
\begin{document}
\begin{figure}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
thick,base node/.style={circle,draw,minimum size=35pt}, real node/.style={double,circle,draw,minimum size=35pt}]
\node[real node] (1) {$s(C)$};
\node[base node] (2) [below left of=1] {$s(\alpha)$};
\node[base node] (3) [below right of=1] {$\neg{s(\alpha)}$};
\path[]
(1) edge node[left] {$L,J$} (2)
edge node[right] {$L,J$} (3)
edge [loop above] node {$C$} (1)
(2) edge [bend left] node {$C,L,J$} (3)
edge [loop left] node {$C,L,J$} (2)
(3) edge [bend left] node {$C,L,J$} (2)
edge [loop right] node {$C,L,J$} (3);
\end{tikzpicture}
\caption{The initial state of the domain in Ex.~\ref{ex:whisper}.}
\end{figure}
\end{document}
Из руководства pgf:
Гораздо лучше использовать
minimum size
вместо этого опцию. Эта опция позволяет > Hagen указать минимальный размер, который должен иметь узел. Если узлы на самом деле должны быть больше из-за более длинного текста, они будут больше, но если текст пустой, то узел будет иметь минимальный размер. Эта опция также полезна для того, чтобы гарантировать, что несколько узлов, содержащих разное количество текста, имеют одинаковый размер.