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 に答える