Haskell图:为什么文本没有长度或宽度?

时间:2016-10-16 17:04:15

标签: 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

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

为什么文本框没有大小?

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

1 个答案:

答案 0 :(得分:3)

  

为什么文本框没有大小?

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

  

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

  1. 使用您选择的后端提供的文本处理功能(如果存在)。例如, diagrams-cairo 提供functions使用Pango自己呈现文本,尽管它们具有IO函数的重要烦恼,因为它们需要查询字体来自系统的信息。

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