如何控制尺度不变性?

How to control scale invariance?

我正在尝试将几个图表放在一起 table。我认为这叫做 "index 打印,摄影人员在必须一次查看多张照片时会这样做。无论如何, 这是代码:

main :: IO ()
main = mainWith @(Diagram B)
     $ (tile . fmap renderOne) examples

renderOne :: AnyGraph -> Diagram B
renderOne (AnyGraph gr) = ...

tile :: [Diagram B] -> Diagram B
tile xs = let columns = (ceiling . sqrt . fromIntegral . length) xs
          in (vcat . fmap hcat . List.chunksOf columns) xs

它没有像我预期的那样工作。但让我们逐渐接近它。首先,这是一个渲染图 单块:

现在,让我们hcat四块砖拼在一起。

添加第二行:(查看 scale invariant 特征如何加厚。)

这是 4 行的样子:

失控!

在我看来,比例不变的特征,例如箭头,是根据图片的面积按比例缩放的。但在这种情况下,我需要在没有 re-scaling 这些功能的情况下扩展图表。我怎样才能做到这一点?

user manual section on measurement units就是你要看的。像箭头之类的东西默认以 "normalized" 单位测量,这些单位被缩放,以便它们始终与整个图片的大小成恒定比例。如果我正确理解您的用例,我认为您可能想改用本地单位。使用你正在使用的任何箭头函数的 primed 变体,并给它一个选项记录,比如

(with & headLength .~ local 0.1)

但无论数字如何,都可以使您的照片看起来像您想要的样子。有关箭头选项的更多信息,请参阅 arrow tutorial