Способ узнать всю ширину изображения в 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 точно нужного размера.