Graphviz ignoruje atrybut rozmiaru (strona A4)

Rozważmy następujący przykładowy wykres minimalny, który powinien zmieścić się na stronie A4

digraph G{
size="8.3,11.7!" ratio=fill;
foo->bar;
}

Połącz zneato -Tpdf -o min_ex.pdf min_ex.gv Wynikowy plik pdf ma wymiary 236 mm x 115 mm, a nie, jak zamierzono, 210 mm x 297 mm.

Graphviz ignoruje ten atrybut zarówno w przypadku wykresów mniejszych niż strona (jak ta), jak i tych, które muszą zostać zmniejszone w celu dopasowania.

Próbowałem dowolnych kombinacjisize iratio atrybutów, nie mogę umieścić wykresu na stronie A4 z żadnym z nich.

Więc co mam określić, że wykres jest zawsze umieszczany na stronie A4, niezależnie od jego rozmiaru?

Dokumentacja:

rozmiar:

Maksymalna szerokość i wysokość rysunku w calach. Jeśli podany jest tylko jeden numer, jest on używany zarówno dla szerokości, jak i wysokości.

Jeśli jest zdefiniowany, a rysunek jest większy niż podany rozmiar, rysunek jest równomiernie skalowany w dół, aby mieścił się w podanym rozmiarze.

Jeśli rozmiar kończy się wykrzyknikiem (!), Przyjmuje się pożądany rozmiar. W tym przypadku, jeśli oba wymiary rysunku są mniejsze niż rozmiar, rysunek jest skalowany równomiernie, aż co najmniej jeden wymiar będzie równy jego wymiarowi.

stosunek

Ustawia współczynnik kształtu (wysokość rysunku / szerokość rysunku) dla rysunku. Należy zauważyć, że jest to regulowane przed wymuszeniem ograniczeń atrybutu rozmiaru. Ponadto obliczenia zwykle ignorują rozmiary węzłów, więc ostateczny rozmiar rysunku może jedynie przybliżać to, co jest pożądane.

Jeśli współczynnik jest liczbowy, przyjmuje się pożądany współczynnik proporcji. Następnie, jeśli rzeczywisty współczynnik kształtu jest mniejszy niż pożądany stosunek, wysokość rysunku jest zwiększana w celu osiągnięcia pożądanego stosunku; jeśli rzeczywisty współczynnik jest większy niż pożądany stosunek, szerokość rysunku jest zwiększana.

Jeśli stosunek = „wypełnij” i atrybut rozmiaru jest ustawiony, pozycje węzłów są skalowane, oddzielnie w obu x i y, tak że ostateczny rysunek dokładnie wypełnia określony rozmiar. Jeśli obie wartości rozmiaru przekraczają szerokość i wysokość rysunku, wówczas obie wartości współrzędnych każdego węzła są odpowiednio skalowane. Jeśli jednak jeden z wymiarów jest mniejszy niż odpowiedni wymiar na rysunku, jeden wymiar jest skalowany w taki sposób, aby końcowy rysunek miał taki sam współczynnik proporcji, jak określony przez rozmiar. Następnie, po renderowaniu, układ zostanie przeskalowany równomiernie w obu wymiarach, aby dopasować się do podanego rozmiaru, co może spowodować również zmniejszenie węzłów i tekstu. Może nie być to, czego chce użytkownik, ale unika trudnego problemu, jak zmienić położenie węzłów w akceptowalny sposób, aby zmniejszyć rozmiar rysunku.

Jeśli ratio = „kompresuj” i ustawiono atrybut rozmiaru, kropka próbuje skompresować początkowy układ, aby zmieścił się w podanym rozmiarze. Zapewnia to ściślejsze upakowanie węzłów, ale zmniejsza równowagę i symetrię. Ta funkcja działa tylko w kropce.

Jeśli ratio = „expand”, ustawiany jest atrybut size, a zarówno szerokość, jak i wysokość wykresu są mniejsze niż wartość w wielkości, pozycje węzłów są skalowane równomiernie, aż co najmniej jeden wymiar będzie pasował dokładnie do rozmiaru. Należy zauważyć, że różni się to od wielkości używanej jako pożądany rozmiar, ponieważ tutaj rysunek jest rozwijany przed wygenerowaniem krawędzi, a wszystkie rozmiary węzłów i tekstu pozostają niezmienione.

Jeśli ratio = „auto”, ustawiany jest atrybut strony, a wykres nie może być narysowany na jednej stronie, a następnie rozmiar jest ustawiany na wartość „idealną”. W szczególności, rozmiar w danym wymiarze będzie najmniejszą całkowitą wielokrotnością rozmiaru strony w tym wymiarze, który jest co najmniej połową bieżącego rozmiaru. Dwa wymiary są następnie skalowane niezależnie do nowego rozmiaru. Ta funkcja działa tylko w kropce.

questionAnswers(1)

yourAnswerToTheQuestion