Разница между значением опциона по умолчанию и его первоначальным значением

Разница между значением опциона по умолчанию и его первоначальным значением

В описании /tikz/shapeопции узла на стр. 216 руководства TikZ & PGF для версии 3.0.1a указано:

нет по умолчанию, изначальноrectangle

Далее объясняется, что эта опция выбирает

форма текущего узла или, если эта опция задана не внутри узла, а где-то снаружи, форма всех узлов в текущей области действия.

В чем разница между опцией, которая имеет значение по умолчанию, и той, которая изначально имеет определенное значение? Если бы вместо того, чтобы изначально быть по rectangleумолчанию , что изменилось бы в ее поведении и способе ее использования?/tikz/shaperectangle

Может ли кто-нибудь объяснить и продемонстрировать различия на минимальном примере?


Настоящий вопрос аналогиченВот этот. Однако этот вопрос касается 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, поэтому нет отдельных функций. Это вопрос синтаксиса.

Связанный контент