Способ узнать всю ширину изображения в PGF (латекс)

У меня есть латексный макрос, который рисует картинку с использованием PGF и Tikz в соответствии с заданными параметрами. Ширина рисунка зависит от этих параметров.

PGF автоматически вычисляет результирующую ширину любой нарисованной картинки, чтобы пользователю не приходилось задавать ее явно (как, например, при использовании латексной сборки в графической среде).

Однако мне нужно знать ширину картинки, которая будет нарисована. Конечно, я мог бы рассчитать это так, как это делает PGF, но это будет довольно трудоемко (много операторов if...). Есть ли способ спросить PGF, какова ширина изображения, которое должно быть нарисовано (какая-то команда, которую я ожидаю)? Либо в среде tikzpicture, либо сразу после нее? Спасибо за помощь.

1 ответ

Решение

Что я, вероятно, сделал бы, это положить tikzpicture окружение в коробке, а затем найдите ширину коробки:

\setbox0=\vbox{\hbox{%
  \begin{tikzpicture}
    % ...
  \end{tizpicture}%
}}
The width of the following picture is {\the\wd0}.
\box0

Обратите внимание, что после запуска \box0поле будет вставлено в документ, а его содержимое будет уничтожено; таким образом, вам нужно запросить ширину окна, прежде чем сделать это. Если вы хотите сохранить ширину, вы можете сохранить ее в регистре измерений с помощью \dimen0=\wd0; В качестве альтернативы, вы можете использовать \copybox0, который вставляет поле, но не разрушает его (хотя это может привести к утечке памяти).

Кроме того, поиграв с этим раньше, я обнаружил, что используя только \vbox заставил прямоугольник всегда быть на всю ширину страницы (что, если вы об этом думаете, имеет смысл); однако, используя только \hbox по какой-то причине произошел сбой распаковки (это был известный мопс). Однако использование обоих этих способов работает - я использую что-то очень похожее для рендеринга изображений TikZ в файлы PDF точно нужного размера.

Другие вопросы по тегам