# https://github.com/mraible/infoq-mini-book/blob/master/src/main/ruby/asciidoctor-pdf-extensions.rb class CustomPDFConverter < (Asciidoctor::Converter.for 'pdf') register_for 'pdf' def layout_part_title node, title, opts = {} fill_absolute_bounds 'EEEEEE' move_down 25 typeset_text title, (calc_line_metrics 1.5), color: '000000', inline_format: true, align: :left, size: 36 move_down 5 # Remove header page.instance_variable_set :@imported_page, true end # Override the built-in layout_toc to move colophon before front of table of contents # NOTE we assume that the colophon fits on a single page def layout_toc doc, num_levels = 2, toc_page_number = 2, start_y = nil, num_front_matter_pages = 0 go_to_page toc_page_number unless (page_number == toc_page_number) || scratch? if scratch? colophon = doc.find_by(context: :section) {|sect| sect.sectname == 'colophon' } if (colophon = colophon.first) doc.instance_variable_set :@colophon, colophon colophon.parent.blocks.delete colophon end else if (colophon = doc.instance_variable_get :@colophon) # if prepress book, consume blank page before table of contents go_to_page(page_number - 1) if @ppbook convert_section colophon go_to_page(page_number + 1) end end offset = colophon && !@ppbook ? 1 : 0 toc_page_numbers = super doc, num_levels, (toc_page_number + offset), start_y, num_front_matter_pages scratch? ? ((toc_page_numbers.begin - offset)..toc_page_numbers.end) : toc_page_numbers end def layout_chapter_title node, title, opts = {} # Remove header page.instance_variable_set :@imported_page, true if (sect_id = node.id) == 'dedication' || sect_id == 'acknowledgements' layout_heading_custom title, align: :center elsif sect_id == 'colophon' #puts 'Processing ' + node.sectname + '...' if node.document.attr? 'media', 'prepress' move_down 150 else move_down 250 end layout_heading title, size: @theme.base_font_size elsif sect_id == 'preface' || sect_id == 'bibliography' || sect_id == 'index' super # default options, with no extra space elsif sect_id.include? 'chapter' # chapters #puts 'Processing ' + sect_id + '...' # use Akkurat font for all custom headings font 'Akkurat' do if node.document.attr? 'media', 'prepress' move_down 120 else move_down 180 end if @ppbook layout_heading 'PART', align: :right, size: 100, style: :normal else layout_heading 'PART', align: :right, size: 100, color: [91, 54, 8, 13], style: :normal end move_up 40 part_number = 'ONE' if sect_id.include? 'chapter-2' part_number = 'TWO' elsif sect_id.include? 'chapter-3' part_number = 'THREE' end if @ppbook layout_heading part_number, align: :right, size: 100, style: :bold layout_heading title, align: :right, style: :normal, size: 30 else layout_heading part_number, align: :right, size: 100, color: [42, 1, 83, 1], style: :bold layout_heading title, align: :right, color: [42, 1, 83, 1], style: :normal, size: 30 end end bounds.move_past_bottom else move_down 50 super # delegate to default implementation move_down 15 end end end