
In der Beschreibung der /tikz/shape
Knotenoption auf S. 216 des TikZ- und PGF-Handbuchs für Version 3.0.1a heißt es:
kein Standard, zunächst
rectangle
Es wird weiter erklärt, dass diese Option auswählt
die Form entweder des aktuellen Knotens oder, wenn diese Option nicht innerhalb eines Knotens, sondern irgendwo außerhalb angegeben ist, die Form aller Knoten im aktuellen Bereich.
Was ist der Unterschied zwischen einer Option, die einen Standardwert hat, und einer, die anfangs einen bestimmten Wert hat? Wenn die Option nicht anfangs standardmäßig wäre rectangle
, /tikz/shape
was rectangle
würde sich an ihrem Verhalten und ihrer Verwendung ändern?
Kann jemand bitte die Unterschiede anhand eines Minimalbeispiels erklären und demonstrieren?
Die vorliegende Frage ähneltDieses hier. Allerdings bezieht sich diese Frage auf PGF (mit dem ich nicht vertraut bin), während es bei der aktuellen Frage um TikZ geht.
PGF und TikZ sind zwei verschiedene Ebenen. Beachten Sie das folgende Zitat aus dem Handbuch (S. 221):
Sowohl PGF als auch TikZ unterstützen solche mehrteiligen Knoten. Auf der unteren Ebene bietet PGF ein System zum Angeben, dass eine Form aus mehreren Teilen besteht. Auf der TikZ-Ebene geben Sie die verschiedenen Knotenteile mit dem folgenden Befehl an:
\nodepart[<options>]{<part name>}
Der Sinn dieses Zitats besteht darin, zu zeigen, dass dasselbe Feature in PGF und in TikZ unterschiedliche Erscheinungsformen haben kann und dass es sinnvoll ist zu fragen, wie sich ein bestimmtes Feature auf einer Ebene manifestiert und wie es sich auf einer anderen Ebene manifestiert. Dies würde zwei unterschiedliche Fragen darstellen, genauso wie eine Frage zum \nodepart
Befehl von TikZ neben einer Frage zum System von PGF zur Festlegung, dass eine Form aus mehreren Teilen besteht, bestehen kann, ohne dass eine dieser Fragen ein Duplikat der anderen ist.
Meine Frage ist: Ist es möglich, den Unterschied zu erklären und ein Minimalbeispiel zu geben, das nur TikZ-Konzepte und -Syntax verwendet, ohne auf PGF auf niedriger Ebene zurückzugreifen? Ist der Unterschied aus der Sicht eines fortgeschrittenen Benutzers wahrnehmbar, der nur TikZ kennt? (Ich bin ein solcher Benutzer.)
Antwort1
Diese Antwort soll erklären, was das TikZ/PGF-Handbuch für Standard-/Anfangswerte eines Schlüsselworts bedeutet. Es kann eine Beziehung haben oder auch nicht mitdie Verwendung von .default
und .initial
Schlüsselnabhängig von der spezifischen Implementierung.
Zum Beispiel fürshape:
no default
bedeutet, dass man nicht sagen kann\node[shape, red]{...}
weil es keinen Standard gibt (in diesem Fall ist der Schlüssel so definiert, dass er ein Argument haben muss, also wird es einen Fehler geben, wenn Sie das tun; danke, @percusse). Wenn es zum Beispielhatte
circle
als Standard bedeutet dies, dass Sie den oben genannten Befehl hätten verwenden können, um einen kreisförmigen Knoten zu erhalten;initial
bedeutet, dass wenn Sie sagen\node[color=red] {...}
ohneErwähnen Sie, dass
shape
Sie ein haben werdenrectangle
.
Ein anderes Beispiel könnte sein (direkt aus dem Handbuch):
/pgf/tips=value
(Standardtrue
, anfänglichon draw
) Alias/tikz/tips
Dieser Schlüssel bestimmt, in welchen Situationen Pfeilspitzen zu einem Pfad hinzugefügt werden. Folgende Werte sind zulässig:
true
(der Wert, der verwendet wird, wenn kein Wert angegeben ist)proper
on draw
(der Anfangswert, wenn der Schlüssel noch gar nicht verwendet wurde)on proper draw
never
oderfalse
(gleiche Wirkung)[...]
(obwohl ich nicht verstehe, was der Kommentar zum letzten Punkt bedeutet – genau das never
und false
sind dasselbe?)
Antwort2
Dies ist der Fall, in dem es so klingt, als ob das Problem mit Schlüsseln zusammenhängt, es sich jedoch shape
um ein ziemlich veraltetes Schlüsselwort handelt und die Art und Weise, wie es definiert ist, ziemlich unkompliziert ist.
\tikzoption{shape}{\edef\tikz@shape{#1}}
( \tikzoption
wurde später zu \tikzset
. Verwenden Sie es also nicht)
Dann sehen wir bei der Initialisierung des TikZ-Pakets
\def\tikz@shape{rectangle}%
Beachten Sie, dass dies der globale Bereich ist. Wenn Sie also nicht daran herumfummeln, erbt jedes TikZ-Bild diesen Standardwert. Dies istnichtbezogen auf /.initial
und /.default
Problem. Es ist die Klassifizierung des Handbuchs, die es wie ein Hauptproblem erscheinen lässt.
Wenn Sie im Handbuch no default
dies sehen, bedeutet dies, dass Sie einen Wert angeben müssen. Wenn Sie no value
dies sehen, müssen Sie keinen Wert angeben. Wenn Sie darauf bestehen, einen Wert anzugeben, erhalten Sie manchmal eine Fehlermeldung, manchmal nicht.
Beispiel,
\node[matrix of math nodes={4}{5}] {\tan \\ \sin};
wird keinen Fehler verursachen. Weil jeder Style/Code-Handler grundsätzlich Argumente akzeptiert. Wenn dies nicht explizit vom /.value forbidden
Handler festgelegt wird, passiert nichts.
Initially <...>
bedeutetWenn Sie nichts anderes angeben, verwende ich <...>
.
Wie immer gelten Ausnahmen …
Eine letzte Anmerkung zum Unterschied zwischen TikZ und PGF. Alle TikZ-Codes werden in PGF-Code umgewandelt, es gibt also keine separaten Funktionen. Es ist eine Frage der Syntax.