Text im Tikz-Knoten zentrieren

Text im Tikz-Knoten zentrieren

Ich verwende Tikz, um eine einfache Schwellenwert-Logikeinheit zu zeichnen.

Ich habe folgenden Code:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\tikzset{basic/.style={draw,fill=blue!20,text width=1em,text badly centered}}
\tikzset{functions/.style={basic,circle,fill=blue!10}}
%\tikzset{inputs/.style={basic,circle,fill=blue!20}}

\begin{document}
\begin{tikzpicture}


\node (center) {y};
\node[functions,left=3em of center, anchor=center] (left) {\scriptsize $\theta$=5};
\path[draw,->] (left) -- (center);
            
            
\node[left=3em of left] (l2) {};
  
        
\node[below of=l2] (n) {$x_2$};
\path[draw,->] (n) -- node[below, rotate=34] {\scriptsize $\omega_2=4$} (left);
  
            
\node[above of=l2] (1) {$x_1$};
\path[draw,->] (1) -- node[above, rotate=-34] {\scriptsize $\omega_1=3$} (left);
 

\end{tikzpicture}
\end{document}

Dies erzeugt die folgende Ausgabe:

Bildbeschreibung hier eingeben

Wie Sie sehen, ist der Text im Knoten nicht zentriert. Ich habe versucht, text centereddie align=centerGröße des Knotens mithilfe von anzupassen minimum width=8mm, inner sep=0mm,.

Wie kann ich den Text genau zentrieren? Ich glaube der Mathemodus macht Probleme.

Antwort1

Der Text ist tatsächlich zentriert, es handelt sich also nicht um ein Ausrichtungsproblem, sondern um ein Problem damit \textwidth, dass sich der Kreisknoten, wenn Sie ihn entfernen, an den Inhalt anpassen kann und, fertig, er ist zentriert.

Mein Vorschlag ist, text width=1emseinen Wert aus dem Stil zu entfernen oder zu erhöhen.

Hier seht ihr, was ich meine:

Bildbeschreibung hier eingeben

und das ist der Code:

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\tikzset{basic/.style={draw,fill=blue!20,text width=1em}}
\tikzset{functions/.style={basic,circle,fill=blue!10}}
%\tikzset{inputs/.style={basic,circle,fill=blue!20}}

\begin{document}
\begin{tikzpicture}

\node[functions, anchor=center] (left) {\scriptsize $\theta$=5};

\node[functions,above=3em of left, anchor=center, text width=% resets the text width
] (left) {\scriptsize $\theta$=5};
            
\end{tikzpicture}
\end{document}

Antwort2

Das Problem ist bereits in der Antwort von @Alenanno beschrieben, d. h. Ihr Text im Knoten functionist breiter als die vorgeschriebene Textbreite – folglich läuft er auf der rechten Seite des Knotens über. Die Lösung besteht darin, (ii) text widthim basicKnoten eine breitere Breite vorzuschreiben oder (ii) basicin der Definition des functionStils nicht zu verwenden, wie dies im unten vorgeschlagenen MWE geschieht. Darin werden hauptsächlich themenfremde Vorschläge gemacht:

  • verwendet wird die in der Bibliothek definierte Syntaxpositioning
  • Stil functionwird unabhängig definiert vonbasic
  • für Kantenbeschriftungen wird quoteseine Bibliothek verwendet
  • für wird vom Knoten gezogenfunction
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,
                quotes}

\tikzset{basic/.style = {draw,fill=blue!20, inner sep=1pt,
                         minimum width=1em, align=center},
     functions/.style = {basic,circle,fill=blue!10, font=\scriptsize},
every edge/.append style = {->},
every edge quotes/.style = {auto, inner sep=1pt, font=\scriptsize, sloped}
}

\begin{document}
    \begin{tikzpicture}[
node distance =1.5em and 3em
                        ]
\node[functions] (f) {$\theta$=5};
\node[above left=of f] (x1) {$x_1$};
\node[below left=of f] (x2) {$x_2$};
\node[right=of f]       (y)     {$y$};
%
\path   (x1) edge ["$\omega_1=3$"]      (f) 
        (x2) edge ["$\omega_2=4$" ']    (f)
        (f)  edge   (y);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen