2016-08-09 3 views

答えて

1

はい、Prawでリーダードット効果を作成する方法があります。

お持ちの場合:

  1. 利用可能な総幅
  2. コンテンツエントリのテーブルの幅
  3. ページ番号の幅
  4. 単一 リーダードットの

space_for_dots = 1. - 2. - 3.

dots = (space_for_dots/4) * '.'

toc_entry = entry_string + dots + entry_page_number


エビ中の文字列の幅を計算するには、フォントクラスの一部である、compute_width_ofを使用することができます。追加した画像のための

例は次のようになります。

def build_toc_entry(left_text, right_text, available_width, text_size) 
    left_text_width = font(YOUR_FONT).compute_width_of(left_text, size: text_size) 
    right_text_width = font(YOUR_FONT).compute_width_of(right_text, size: text_size) 
    dot_width = font(YOUR_FONT).compute_width_of('.', size: text_size) 
    space_width = font(YOUR_FONT).compute_width_of(' ', size: text_size) 

    space_for_dots = available_width - left_text_width - right_text_width - space_width * 2 
    dots = '.' * (space_for_dots/dot_width) 

    "#{left_text} #{dots} #{right_text}" # return the finished toc entry 
end 

text 'Locate the information on the page indicated.' 
text build_toc_entry('Leader Dots', '3', 350, 8) 
text build_toc_entry('Dingbats', '5', 350, 8) 
text build_toc_entry('Bullets', '8', 350, 8) 
+0

をこれは良いスタートのように思えるが、リーダーのドットが縦に整列する必要があります。私はそれがより多くの論理を必要とすると思う。 – Gene

+0

まあ、私はあなたが何を意味するか分からない。 提供された画像OPでは、リーダドットはToCアイテムの直後から始まり、ページ番号の前にずっと進みます。 私の例では、すべてのToC行の長さを同じにする必要がある場合は、同じ 'available_width'を使用します。 実際には、1つのドットが完璧に別のドットの下または上に置かれている場合を除き、私はそれを特に考慮しませんでしたが、私はこの効果の主な問題は 'compute_width_of'について知りませんし、それを使ってこの種のアラインメントも動作させることができると思います。 – sLeitner

+0

それはまさに私が意味していたものです。ほとんどの目次を見てください。異なるエントリのドットは、縦の列に整列します。それは侵害されるまで気付かれないほど一般的な組版の習慣の一つです。ここに例があります:https://www.w3.org/Style/Examples/007/leaders.en.html OPの画像を見ると、そこにもドットが垂直に並んでいることがわかります。 – Gene

関連する問題