lang en ja

Asciidoctor で 余白にページ罫線を書く方法

Published Last Update author
2024/11/23 2024/11/26 Shumpei Tanaka

概要

Asciidoctor でページ罫線を余白に書く方法について書く。

Microsoft’s Office の Word には ページ罫線ヘッダーを囲む の機能がある。

この機能を代替するためのスクリプトを書いた。

デモ

結果は次のようになる。

script results

使用方法

このスクリプトの使用方法は リポジトリ: Shumpei-Tanaka/AsciiDoc-BorderInMargin を参照。

スクリプト

最新版は リポジトリ: Shumpei-Tanaka/AsciiDoc-BorderInMargin を参照。

write_header_border はヘッダー周辺を書く関数。 Asciidoctor のスタイル設定から以下の値を使用して囲む範囲を計算する。

  • header margin
  • herder column ratios

write_mergin_border はページ全体の境界を余白に書く関数。 margi の値はスタイル設定から引っ張っている。

class PDFConverterCustomTitlePage < (Asciidoctor::Converter.for 'pdf')
  register_for 'pdf'
  def ink_title_page(doc)
    super
    write_mergin_border 5, 1
    write_header_border 5, 1
  end

  def ink_running_content(*)
    write_mergin_border 5, 1
    write_header_border 5, 1
    super
  end
end

def write_header_border(line_offset:, line_width:)
  _m_t, m_r, m_b, m_l = page_margin
  header_height = theme.header_height
  header_columns = theme.header_columns
  mh_t, mh_r, _mh_b, mh_l = theme.header_margin

  columns = header_columns.delete('^0-9,.').split(',').map(&)

  o_sum = columns.sum
  sum = 0
  ps = []
  columns.pop
  columns.each do |col|
    sum += col
    ps << sum
  end
  ps = ps.map { |col| col / o_sum }

  p_t = -(page_height - (mh_t - line_offset) - m_b)
  p_b = -(page_height - (mh_t + line_offset) - m_b - header_height)
  p_l = -line_offset
  p_r = page_width - (m_r - line_offset) - m_l

  t_width = page_width - mh_r - mh_l

  p_vs = ps.map do |i|
    t_width * i - m_l + mh_l
  end

  move_cursor_to 0
  stroke_horizontal_rule '000000', line_width, p_t, line_offset,
                                   -line_offset
  stroke_horizontal_rule '000000', line_width, p_b, line_offset,
                                   -line_offset
  p_vs.each do |p_v|
    stroke_vertical_line(-p_b, -p_t, p_v)
  end
  stroke_vertical_line(-p_b, -p_t, p_l)
  stroke_vertical_line(-p_b, -p_t, p_r)
end

def write_mergin_border(line_offset:, line_width:)
  m_t, m_r, m_b, m_l = page_margin

  p_t = -(page_height - (m_t - line_offset) - m_b)
  p_b = line_offset
  p_l = -line_offset
  p_r = page_width - (m_r - line_offset) - m_l

  move_cursor_to 0
  stroke_horizontal_rule '000000', line_width, p_t, line_offset,
                                   -line_offset
  stroke_horizontal_rule '000000', line_width, p_b, line_offset,
                                   -line_offset
  stroke_vertical_rule '000000', line_width, p_l, line_offset,
                                 line_offset
  stroke_vertical_rule '000000', line_width, p_r, line_offset,
                                 line_offset
end

付録

Microsoft’s Office の Word で ページ罫線ヘッダーを囲む を設定する方法。

ページ罫線 は次のように設定できる

  • 開く: デザインページ罫線
  • 押す: 囲む(X)
  • 押す: OK
setting page border in Word

設定すると次のようになる。

result of page border in Word

ヘッダーを囲む は次のように設定する。

  • 開く: デザインページ罫線
  • 開く: オプション
  • 基準本文 に設定する
  • チェックを入れる: ヘッダーを囲む
setting page border and surround header in Word

設定すると次のようになる。

result of page border and surround header in Word

Say thank you

役立ったら下のリンクから支援をもらえると嬉しい
paypal.me Badge paypal.me Badge