Способ узнать всю ширину изображения в PGF (латекс) - PullRequest
3 голосов
/ 11 апреля 2010

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

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

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

1 Ответ

5 голосов
/ 12 апреля 2010

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

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

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

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

...