1

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

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

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


为什么文本框没有大小?

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

4

1 回答 1

3

为什么文本框没有大小?

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

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

  1. 使用您选择的后端提供的文本处理功能(如果存在)。例如,diagrams-cairo提供了使用 Pango 自己渲染文本的函数IO,尽管它们是函数,因为它们需要从系统中查询字体信息。

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

于 2016-10-16T18:05:14.800 回答