概要
Asciidoctor でページ罫線を余白に書く方法について書く。
Microsoft’s Office の Word には ページ罫線 と ヘッダーを囲む の機能がある。
この機能を代替するためのスクリプトを書いた。
デモ
結果は次のようになる。
使用方法
このスクリプトの使用方法は リポジトリ: 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 line_offset: 5, line_width: 1
write_header_border line_offset: 5, line_width: 1
end
def ink_running_content(*)
write_mergin_border line_offset: 5, line_width: 1
write_header_border line_offset: 5, line_width: 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(&:to_f)
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: line_width, at: p_t, left_projection: line_offset,
right_projection: -line_offset
stroke_horizontal_rule '000000', line_width: line_width, at: p_b, left_projection: line_offset,
right_projection: -line_offset
p_vs.each do |p_v|
stroke_vertical_line(-p_b, -p_t, at: p_v)
end
stroke_vertical_line(-p_b, -p_t, at: p_l)
stroke_vertical_line(-p_b, -p_t, at: 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: line_width, at: p_t, left_projection: line_offset,
right_projection: -line_offset
stroke_horizontal_rule '000000', line_width: line_width, at: p_b, left_projection: line_offset,
right_projection: -line_offset
stroke_vertical_rule '000000', line_width: line_width, at: p_l, top_projection: line_offset,
bottom_projection: line_offset
stroke_vertical_rule '000000', line_width: line_width, at: p_r, top_projection: line_offset,
bottom_projection: line_offset
end付録
Microsoft’s Office の Word で ページ罫線 と ヘッダーを囲む を設定する方法。
ページ罫線 は次のように設定できる
- 開く:
デザイン→ページ罫線 - 押す:
囲む(X) - 押す:
OK
設定すると次のようになる。
ヘッダーを囲む は次のように設定する。
- 開く:
デザイン→ページ罫線 - 開く:
オプション 基準を本文に設定する- チェックを入れる:
ヘッダーを囲む
設定すると次のようになる。