Centrar texto en el nodo tikz

Centrar texto en el nodo tikz

Estoy usando tikz para dibujar una unidad lógica de umbral simple.

Tengo el siguiente código:

\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}

Esto genera el siguiente resultado:

ingrese la descripción de la imagen aquí

Como puede ver, el texto en el nodo no está centrado. Intenté text centerede align=centerintenté ajustar el tamaño del nodo usando minimum width=8mm, inner sep=0mm,.

¿Cómo puedo ajustar el texto para que esté exactamente centrado? Creo que el modo matemático causa problemas.

Respuesta1

En realidad el texto está centrado, por lo que no es un problema de alineación, sino un problema de \textwidth, si lo eliminas, el nodo del círculo se puede adaptar al contenido y listo, está centrado.

Mi sugerencia es eliminar text width=1emo aumentar su valor del estilo.

Aquí puedes ver lo que quiero decir:

ingrese la descripción de la imagen aquí

y este es el código:

\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}

Respuesta2

El problema ya se describe en la respuesta de @Alenanno, es decir, el texto en el nodo functiones más ancho que el ancho de texto prescrito; en consecuencia, se extiende en el lado derecho del nodo. La solución es (ii) prescribir un nodo más amplio text widtho basic(ii) no utilizar basicen la definición del functionestilo, como se hace en el MWE sugerido a continuación. En él se proponen sugerencias en su mayoría fuera de tema:

  • Se utiliza la sintaxis definida en la biblioteca.positioning
  • El estilo functionse define independientemente debasic
  • para etiquetas de borde se utiliza quotesla biblioteca
  • para se extrae del nodofunction
\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}

ingrese la descripción de la imagen aquí

información relacionada