
En la descripción de la /tikz/shape
opción de nodo en la p. 216 del manual de TikZ & PGF para la versión 3.0.1a dice:
sin valor predeterminado, inicialmente
rectangle
Continúa explicando que esta opción selecciona
la forma del nodo actual o, cuando esta opción no se proporciona dentro de un nodo sino en algún lugar fuera, la forma de todos los nodos en el alcance actual.
¿Cuál es la diferencia entre una opción que tiene un valor predeterminado y una que inicialmente tiene un valor determinado? Si en lugar de ser inicialmente rectangle
el /tikz/shape
que fuera rectangle
por defecto, ¿qué cambiaría en su comportamiento y forma de uso?
¿Alguien puede explicar y demostrar las diferencias con un ejemplo mínimo?
La presente pregunta es similar aÉste. Sin embargo, esa pregunta trata sobre PGF (con el que no estoy familiarizado), mientras que la pregunta actual trata sobre TikZ.
PGF y TikZ son dos niveles separados. Considere la siguiente cita del manual (p. 221):
Tanto PGF como TikZ admiten este tipo de nodos multiparte. En el nivel inferior, PGF proporciona un sistema para especificar que una forma consta de varias partes. En el nivel de TikZ, especifica las diferentes partes del nodo usando el siguiente comando:
\nodepart[<options>]{<part name>}
El objetivo de esta cita es mostrar que una misma característica puede tener diferentes manifestaciones en PGF vs. en TikZ y es razonable preguntar cómo una determinada característica se manifiesta en un nivel y cómo se manifiesta en otro nivel, y esto constituiría dos diferentes preguntas, del mismo modo que una pregunta sobre el comando de TikZ \nodepart
puede coexistir con una pregunta sobre el sistema de PGF para especificar que una forma consta de varias partes sin que ninguna de estas preguntas sea un duplicado de la otra.
Mi pregunta es: ¿Es posible explicar la diferencia y dar un ejemplo mínimo utilizando sólo los conceptos y la sintaxis de TikZ sin recurrir a PGF de bajo nivel? ¿Es perceptible la diferencia desde la perspectiva de un usuario de alto nivel que sólo conoce TikZ? (Soy uno de esos usuarios).
Respuesta1
Esta respuesta es para explicar qué significa el manual de TikZ/PGF para los valores predeterminados/iniciales de una palabra clave. Puede o no tener alguna relación conel uso de .default
y .initial
clavesdependiendo de la implementación específica.
Por ejemplo parashape:
no default
significa que no puedes decir\node[shape, red]{...}
porque no hay un valor predeterminado (en este caso, la clave está definida de modo que debe tener un argumento, por lo que generará un error si lo tiene; gracias, @percusse). Si, por ejemplo,tenía
circle
por defecto, eso significa que podrías haber usado el comando antes mencionado para tener un nodo en forma de círculo;initial
significa que si dices\node[color=red] {...}
sinmencionando
shape
que tendrás unrectangle
.
Otro ejemplo podría ser (directamente del manual):
/pgf/tips=value
(predeterminadotrue
, inicialmenteon draw
) alias/tikz/tips
Esta clave rige en qué situaciones se agregan puntas de flecha a una ruta. Se permiten los siguientes valores:
true
(el valor utilizado cuando no se especifica ningún valor)proper
on draw
(el valor inicial, si la clave aún no se ha utilizado)on proper draw
never
ofalse
(mismo efecto)[...]
(aunque no entiendo qué significa el comentario sobre el último elemento, ¿solo eso never
y false
son lo mismo?)
Respuesta2
Este es el caso en el que parece que el problema está relacionado con las claves, pero shape
es una palabra clave bastante heredada y la forma en que se define es bastante sencilla.
\tikzoption{shape}{\edef\tikz@shape{#1}}
( \tikzoption
luego se convirtió en \tikzset
. Así que no lo uses)
Luego, en la inicialización del paquete TikZ vemos
\def\tikz@shape{rectangle}%
Tenga en cuenta que este es el alcance global, por lo que si no lo modifica, cada imagen de TikZ heredará este valor predeterminado. Esto esnorelacionado con /.initial
un /.default
problema. Es la clasificación del manual lo que hace que parezca una cuestión clave.
En el manual, si ve no default
esto, significa que debe proporcionar un valor. Si ves no value
entonces... bueno... no necesitas proporcionar un valor. Si insiste en proporcionar un valor, a veces obtendrá un error y otras no.
Ejemplo,
\node[matrix of math nodes={4}{5}] {\tan \\ \sin};
No habrá error. Porque cada controlador de estilo/código acepta intrínsecamente argumentos. Si el controlador no lo establece explícitamente, /.value forbidden
no sucede nada.
Initially <...>
mediosi no proporcionas nada más voy a usar <...>
.
Como siempre, se aplican excepciones...
Una nota final sobre la diferencia TikZ/PGF. Todo TikZ se convierte a código PGF, por lo que no hay funcionalidades separadas. Es una cuestión de sintaxis.