
В описании /tikz/shape
опции узла на стр. 216 руководства TikZ & PGF для версии 3.0.1a указано:
нет по умолчанию, изначально
rectangle
Далее объясняется, что эта опция выбирает
форма текущего узла или, если эта опция задана не внутри узла, а где-то снаружи, форма всех узлов в текущей области действия.
В чем разница между опцией, которая имеет значение по умолчанию, и той, которая изначально имеет определенное значение? Если бы вместо того, чтобы изначально быть по rectangle
умолчанию , что изменилось бы в ее поведении и способе ее использования?/tikz/shape
rectangle
Может ли кто-нибудь объяснить и продемонстрировать различия на минимальном примере?
Настоящий вопрос аналогиченВот этот. Однако этот вопрос касается PGF (с которым я не знаком), тогда как текущий вопрос касается TikZ.
PGF и TikZ — это два отдельных уровня. Рассмотрим следующую цитату из руководства (стр. 221):
И PGF, и TikZ поддерживают такие многокомпонентные узлы. На нижнем уровне PGF предоставляет систему для указания того, что форма состоит из нескольких частей. На уровне TikZ вы указываете различные части узла, используя следующую команду:
\nodepart[<options>]{<part name>}
Цель этой цитаты — показать, что одна и та же функция может иметь разные проявления в PGF и в TikZ, и разумно спросить, как определенная функция проявляется на одном уровне и как она проявляется на другом уровне, и это будет представлять собой два разных вопроса, точно так же, как вопрос о \nodepart
команде TikZ может сосуществовать с вопросом о системе PGF для указания того, что форма состоит из нескольких частей, при этом ни один из этих вопросов не будет дублировать другой.
Мой вопрос: возможно ли объяснить разницу и привести минимальный пример, используя только концепции и синтаксис TikZ, не прибегая к низкоуровневому PGF? Ощутима ли разница с точки зрения пользователя высокого уровня, который знает только TikZ? (Я такой пользователь.)
решение1
Этот ответ для объяснения того, что руководство TikZ/PGF означает для значений по умолчанию/начальных значений ключевого слова. Это может иметь или не иметь никакого отношения киспользование .default
и .initial
ключейв зависимости от конкретной реализации.
Например, дляshape:
no default
означает, что вы не можете сказать\node[shape, red]{...}
потому что нет значения по умолчанию (в этом случае ключ определен так, что он должен иметь аргумент, поэтому он выдаст ошибку, если вы это сделаете; спасибо, @percusse). Если, например, этоимел
circle
по умолчанию это означает, что вы могли бы использовать вышеупомянутую команду, чтобы получить узел в форме круга;initial
означает, что если вы говорите\node[color=red] {...}
безупомянув,
shape
что у вас будетrectangle
.
Другой пример (прямо из руководства):
/pgf/tips=value
(по умолчаниюtrue
, изначальноon draw
) псевдоним/tikz/tips
Этот ключ управляет тем, в каких ситуациях наконечники стрелок добавляются к пути. Допустимы следующие значения:
true
(значение, используемое, если значение не указано)proper
on draw
(начальное значение, если ключ еще не использовался)on proper draw
never
илиfalse
(тот же эффект)[...]
(хотя я не понимаю, что означает комментарий к последнему пункту --- это одно never
и false
то же?)
решение2
Это тот случай, когда кажется, что проблема связана с ключами, но shape
это довольно устаревшее ключевое слово, и способ его определения довольно прост.
\tikzoption{shape}{\edef\tikz@shape{#1}}
( \tikzoption
позже стал \tikzset
. Так что не используйте его)
Затем при инициализации пакета TikZ мы видим
\def\tikz@shape{rectangle}%
Обратите внимание, что это глобальная область действия, поэтому, если вы не будете с ней возиться, каждая картинка TikZ унаследует это значение по умолчанию. Этонетсвязан с /.initial
и /.default
проблемой. Это классификация руководства, которая делает это похоже на ключевую проблему.
В руководстве, если вы видите no default
это, значит, вам нужно предоставить значение. Если вы видите no value
, то... ну... вам не нужно предоставлять значение. Если вы настаиваете на предоставлении значения, иногда вы получаете ошибку, иногда нет.
Пример,
\node[matrix of math nodes={4}{5}] {\tan \\ \sin};
не будет ошибки. Поскольку каждый обработчик стиля/кода по своей сути принимает аргументы. Если явно не установлено обработчиком, /.value forbidden
то ничего не происходит.
Initially <...>
означаетесли вы не предоставите ничего другого, я буду использовать <...>
.
Как обычно, возможны исключения...
Последнее замечание о разнице TikZ/PGF. Весь TikZ конвертируется в код PGF, поэтому нет отдельных функций. Это вопрос синтаксиса.