Рисование круга с линией вниз по центру и текста по обе стороны в Tikz - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу создать круговой узел с линией полностью по центру с текстом по обе стороны от линии. Пока что приведенный ниже код рисует полосу той же высоты, что и текст, но не проходит через весь центр круга. Как мне это сделать?

\begin{tikzpicture}
\node (y) [shape=circle,draw] at (0,0) {$\Sigma | f$};
\end{tikzpicture}

1 Ответ

2 голосов
/ 01 октября 2019

Есть много способов сделать это.

В tikz есть понятие многочастных узлов и формы, разделенной по кругу, которая позволяет иметь двойную часть в форме круга. Проблема в том, что допускается только горизонтальное разделение, а для выполнения вертикального разделения требуется 1 /, чтобы повернуть фигуру, чтобы иметь вертикальное разделение, и 2 /, чтобы повернуть внутренний текст в противоположном направлении.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes.multipart}

\begin{document}
\begin{tikzpicture}
\node [circle split,draw,rotate=90] (y) {\rotatebox{-90}{$\sigma$}
     \nodepart{lower} \rotatebox{-90}{$f$}};
\end{tikzpicture}
\end{document}

enter image description here

Но сделать это с помощью обычной команды tikz очень просто и позволяет лучше контролировать внешний вид узла и выравнивание текста.

Предлагаю сначала поставить ваши текстовые узлы. Затем определите оптимальный размер круга с помощью библиотеки подбора. И последний, чтобы нарисовать вертикальную линию.

Вот соответствующий код.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit}

\begin{document}
\begin{tikzpicture}
\node[anchor=east,baseline] (sigma) at (0,0) {$\sigma$} ;
\node[anchor=west,baseline] (f) at (0,0) {$f$} ;
\node[circle,draw,fit={(sigma)(f)}] (y) {} ;
\draw (y.south) -- (y.north) ;
\end{tikzpicture}
\end{document}

enter image description here

Вы можете изменить пространство междутекст и окружность с параметром inner sep на узле y.

Если вам нужно несколько кругов одинакового диаметра, замените fit= на minimum width=1cm (или любой другой).

В заключение, если вам нужно иметь более близкие узлы, добавьте inner sep=0.5pt (или любое другое значение) для первых двух узлов.

Вот результат с различными параметрами.

\begin{tikzpicture}
\node[anchor=east,baseline,inner sep=0.5pt] (sigma) at (0,0) {$\sigma$} ;
\node[anchor=west,baseline,inner sep=0.5pt] (f) at (0,0) {$f$} ;
\node[circle,draw,fit={(sigma)(f)},inner sep=1pt] (y) {} ;
\draw (y.south) -- (y.north) ;
\end{tikzpicture}

enter image description here

...