Haskell 图 : Why does text not have length or width?

标签 haskell haskell-diagrams

我想创建一个可以设置特定宽度和高度的文本框。但是,我创建的文本框似乎一开始就没有宽度和高度。例如。以下代码:

main = do
  putStrLn $ show $ width $ myText
  putStrLn $ show $ height $ myText
  mainWith myText

myText :: Diagram B
myText = text "here" # lw 1 # fontSizeL 0.2 # fc grey # scaleX 1

生成一个空白图表(没有文本),并打印“0.0”作为文本框的宽度和高度:

ghc --make Main.hs && ./Main -o circle.svg -w 400
[1 of 1] Compiling Main             ( Main.hs, Main.o )
Linking Main ...
0.0
0.0

为了让文本出现,我似乎需要将它放在其他东西的上面。例如。以下代码:

main = do
  putStrLn $ show $ width $ myDiagram 
  putStrLn $ show $ height $ myDiagram
  mainWith myDiagram

myDiagram :: Diagram B
myDiagram = myText <> myBackground

myText :: Diagram B
myText = text "here" # lw 1 # fontSizeL 0.2 # fc grey # scaleX 1

myBackground :: Diagram B
myBackground = rect 1 1 # fc black

按预期在黑色背景中生成灰色文本。


为什么文本框没有大小?

如何将文本框的长度和宽度设置为特定值?

最佳答案

Why does the text box not have a size?

因为文本处理不仅高度依赖于用于呈现图表的后端(参见 the User's Guide ),而且还可能依赖于用于运行程序的系统中如何配置字体。

How can I set the length and width of a text box to a certain value?

  1. 使用您选择的后端提供的文本处理函数(如果存在)。例如,diagrams-cairo 提供 functions使用 Pango 自行渲染文本,但它们的最大烦恼是 IO 函数,因为它们需要从系统查询字体信息。

  2. 使用SVGFonts独立于后端来描边文本。这种方法也有一些不便(字体选择有限,除非您按照文档中的说明自行将所选字体转换为 SVGFonts 格式;具有大量字符集的字体可能会导致很小但明显的延迟。首先由您的程序使用,因为它们必须经过初始处理),但至少您不必担心 IO 或后端特定的怪癖。

关于Haskell 图 : Why does text not have length or width?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40072963/

相关文章:

haskell - 被 0 返回困扰

haskell - Haskell 中的 Int32 到 Int

haskell - 为什么地板无限不会抛出一些错误?

Haskell 快速检查生成和测试玫瑰树?

json - 在Aeson中查看deriveJSON生成的代码

haskell - 如何控制尺度不变性?

haskell - Haskell 图 SVG 文件的边距

haskell - 如何通过集合运算组合形状?

haskell - 如何定义结合多个原始后端的图表后端