diff options
author | Ralph Amissah <ralph@amissah.com> | 2020-02-06 08:55:48 -0500 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2020-02-26 09:59:18 -0500 |
commit | fc25d90c46f454448a41438c62fdd7dad5105946 (patch) | |
tree | 38e6bc56211a2392d8a87b81fd031441a79faa65 | |
parent | imports related, mostly cosmetic (diff) |
latex outputs (various paper sizes & orientation)
- a4, a5, b4, letter, legal
- portrait, landscape
-rw-r--r-- | org/default_paths.org | 8 | ||||
-rw-r--r-- | org/out_latex.org | 349 | ||||
-rw-r--r-- | org/spine.org | 7 | ||||
-rw-r--r-- | src/doc_reform/io_out/latex.d | 260 | ||||
-rw-r--r-- | src/doc_reform/io_out/paths_output.d | 8 | ||||
-rwxr-xr-x | src/doc_reform/spine.d | 7 | ||||
-rwxr-xr-x | util/dr_tex.rb | 4 |
7 files changed, 424 insertions, 219 deletions
diff --git a/org/default_paths.org b/org/default_paths.org index bb7ca79..0e80bb2 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -1518,8 +1518,12 @@ template spinePathsLaTeX() { string latex_path_stuff() { return ((base.chainPath(base_filename(doc_matters.src.filename))).asNormalizedPath).array; } - string latex_file_with_path() { - return ((base.chainPath(base_filename(doc_matters.src.filename) ~ "." ~ doc_matters.src.language ~ ".tex")).asNormalizedPath).array; + string latex_file_with_path(string paper_size_orientation) { + return ((base.chainPath(base_filename(doc_matters.src.filename) + ~ "." ~ doc_matters.src.language + ~ "." ~ paper_size_orientation + ~ ".tex") + ).asNormalizedPath).array; } string images() { string image_dir = "image"; diff --git a/org/out_latex.org b/org/out_latex.org index f679ecd..501fba7 100644 --- a/org/out_latex.org +++ b/org/out_latex.org @@ -32,7 +32,6 @@ template outputLaTeX() { <<output_latex_shared>> <<output_latex_shared_0>> <<output_latex_head>> - <<output_latex_head_1_format_string>> <<output_latex_head_1_tex>> <<output_latex_head_1_format_string_variables>> <<output_latex_head_0_format_string>> @@ -52,8 +51,9 @@ template outputLaTeX() { #+NAME: output_latex #+BEGIN_SRC d void writeOutputLaTeX(T,M)( - const T latex_content, - M doc_matters, + const T latex_content, + M doc_matters, + string paper_size_orientation, ) { auto pth_latex = spinePathsLaTeX(doc_matters); try { @@ -69,9 +69,9 @@ void writeOutputLaTeX(T,M)( (pth_latex.latex_path_stuff).mkdirRecurse; } if (!(doc_matters.opt.action.quiet)) { - writeln(" ", pth_latex.latex_file_with_path); + writeln(" ", pth_latex.latex_file_with_path(paper_size_orientation)); } - auto f = File(pth_latex.latex_file_with_path, "w"); + auto f = File(pth_latex.latex_file_with_path(paper_size_orientation), "w"); f.writeln(latex_content.head); f.writeln(latex_content.content); f.writeln(latex_content.tail); @@ -102,10 +102,23 @@ void outputLaTeX(D,M)( string tail; } auto latex = LaTeX(); - latex.head = latex_head(doc_matters); - latex.content = latex_body(doc_abstraction, doc_matters); - latex.tail = latex_tail(doc_matters); - latex.writeOutputLaTeX(doc_matters); + foreach (paper_size_orientation; [ + "a4.portrait", + "a4.landscape", + "letter.portrait", + "letter.landscape", + "a5.portrait", + "a5.landscape", + "b4.portrait", + "b4.landscape", + // "legal.portrait", + // "legal.landscape", + ]) { + latex.head = latex_head(doc_matters, paper_size_orientation); + latex.content = latex_body(doc_abstraction, doc_matters, paper_size_orientation); + latex.tail = latex_tail(doc_matters, paper_size_orientation); + latex.writeOutputLaTeX(doc_matters, paper_size_orientation); + } } #+END_SRC @@ -134,17 +147,27 @@ import doc_reform.io_out; struct A4 { auto portrait() { struct V { - uint w = 160; - uint h = 228; - uint img_px = 450; + const uint w = 160; + const uint h = 228; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "12pt"; + string name = "a4paper"; + uint img_px = 450; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 238; - uint h = 160; - uint img_px = 300; + const uint w = 238; + const uint h = 160; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "11pt"; + string name = "a4paper"; + uint img_px = 300; + bool is_portrait = false; } return H(); } @@ -155,17 +178,27 @@ import doc_reform.io_out; struct A5 { auto portrait() { struct V { - uint w = 112; - uint h = 162; - uint img_px = 280; + const uint w = 112; + const uint h = 162; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "a5paper"; + uint img_px = 280; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 152; - uint h = 100; - uint img_px = 190; + const uint w = 152; + const uint h = 100; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "a5paper"; + uint img_px = 190; + bool is_portrait = false; } return H(); } @@ -176,17 +209,27 @@ import doc_reform.io_out; struct B4 { auto portrait() { struct V { - uint w = 140; - uint h = 204; - uint img_px = 356; + const uint w = 140; + const uint h = 204; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "b4paper"; + uint img_px = 356; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 200; - uint h = 130; - uint img_px = 260; + const uint w = 200; + const uint h = 130; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "b4paper"; + uint img_px = 260; + bool is_portrait = false; } return H(); } @@ -197,17 +240,27 @@ import doc_reform.io_out; struct Letter { auto portrait() { struct V { - uint w = 166; - uint h = 212; - uint img_px = 468; + const uint w = 166; + const uint h = 212; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "letterpaper"; + uint img_px = 468; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 226; - uint h = 166; - uint img_px = 290; + const uint w = 226; + const uint h = 166; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "letterpaper"; + uint img_px = 290; + bool is_portrait = false; } return H(); } @@ -218,17 +271,27 @@ import doc_reform.io_out; struct Legal { auto portrait() { struct V { - uint w = 168; - uint h = 286; - uint img_px = 474; + const uint w = 168; + const uint h = 286; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "legalpaper"; + uint img_px = 474; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 296; - uint h = 166; - uint img_px = 420; + const uint w = 296; + const uint h = 166; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "legalpaper"; + uint img_px = 420; + bool is_portrait = false; } return H(); } @@ -897,20 +960,25 @@ string table(O,M)( string _txt, O obj, M doc_matters, + string paper_size_orientation, ) { if (obj.metainfo.is_a == "table") { auto _t = _txt.tablarize(obj); string _table = _t[0]; string _t_n = _t[1]; - string papertype = "a4"; uint pw = 0; - switch (papertype) { - case "a4": pw = (paper.a4.portrait.w - 20); break; - case "a5": pw = (paper.a5.portrait.w - 20); break; - case "b4": pw = (paper.b4.portrait.w - 20); break; - case "letter": pw = (paper.letter.portrait.w - 20); break; - case "legal": pw = (paper.legal.portrait.w - 20); break; - default: pw = 0; break; + switch (paper_size_orientation) { + case "a4.portrait": pw = (paper.a4.portrait.w - 20); break; + case "a4.landscape": pw = (paper.a4.landscape.w - 20); break; + case "a5.portrait": pw = (paper.a5.portrait.w - 20); break; + case "a5.landscape": pw = (paper.a5.landscape.w - 20); break; + case "b4.portrait": pw = (paper.b4.portrait.w - 20); break; + case "b4.landscape": pw = (paper.b4.landscape.w - 20); break; + case "letter.portrait": pw = (paper.letter.portrait.w - 20); break; + case "letter.landscape": pw = (paper.letter.landscape.w - 20); break; + case "legal.portrait": pw = (paper.legal.portrait.w - 20); break; + case "legal.landscape": pw = (paper.legal.landscape.w - 20); break; + default: pw = 0; break; } // auto textwidth = (pw - 24); string _colw = ""; @@ -949,7 +1017,8 @@ string table(O,M)( #+NAME: output_latex_head #+BEGIN_SRC d string latex_head(M)( - M doc_matters, + M doc_matters, + string paper_size_orientation, ) { #+END_SRC @@ -959,13 +1028,19 @@ string latex_head(M)( #+NAME: output_latex_head #+BEGIN_SRC d - struct paperType { + struct paperTypeLatex { string a4_portrait; string a4_landscape; + string a5_portrait; + string a5_landscape; + string b4_portrait; + string b4_landscape; string us_letter_portrait; string us_letter_landscape; + string us_legal_portrait; + string us_legal_landscape; } - auto paper = paperType(); + auto paper_type_latex = paperTypeLatex(); #+END_SRC ****** footer @@ -1002,82 +1077,6 @@ string latex_head(M)( } #+END_SRC -****** a4, portrait - -#+NAME: output_latex_head_1_format_string -#+BEGIN_SRC d - paper.a4_portrait = format(q"┃ -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC latex -\documentclass[12pt,a4paper,titlepage]{scrartcl} -\setlength{\textheight}{228mm} \setlength{\textwidth}{160mm} -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d -┃", - ); -#+END_SRC - -****** a4, landscape - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d - paper.a4_landscape = format(q"┃ -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC latex -\documentclass[11pt,a4paper,landscape,titlepage,twocolumn]{scrartcl} -\setlength{\textheight}{160mm} \setlength{\textwidth}{238mm} -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d -┃", - ); -#+END_SRC - -****** us letter, portrait - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d - paper.us_letter_portrait = format(q"┃ -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC latex -\documentclass[12pt,letterpaper,titlepage]{scrartcl} -\setlength{\textheight}{212mm} \setlength{\textwidth}{166mm} -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d -┃", - ); -#+END_SRC - -****** us letter, landscape - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d - paper.us_letter_landscape = format(q"┃ -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC latex -\documentclass[11pt,letterpaper,landscape,titlepage,twocolumn]{scrartcl} -\setlength{\textheight}{166mm} \setlength{\textwidth}{226mm} -#+END_SRC - -#+NAME: output_latex_head_1_tex -#+BEGIN_SRC d -┃", - ); -#+END_SRC - ***** paper margins ****** struct @@ -1224,6 +1223,77 @@ string latex_head(M)( #+END_SRC **** latex head starts +***** dimensions & orientation +****** set + +#+NAME: output_latex_head_0_format_string +#+BEGIN_SRC d + string set_paper(P)(P paper_set,) { + string paper_type_description; + if (paper_set.is_portrait) { + paper_type_description = format(q"┃ +\documentclass[%s,%s,titlepage]{scrartcl} +\setlength{\textheight}{%s} \setlength{\textwidth}{%s} +┃", + paper_set.font_size, + paper_set.name, + paper_set.height, + paper_set.width, + ); + } else { + paper_type_description = format(q"┃ +\documentclass[%s,%s,landscape,titlepage,twocolumn]{scrartcl} +\setlength{\textheight}{%s} \setlength{\textwidth}{%s} +┃", + paper_set.font_size, + paper_set.name, + paper_set.height, + paper_set.width, + ); + } + return paper_type_description; + } +#+END_SRC + +***** (a4, a5, b4, letter, legal) * (portrait & landscape) + +#+NAME: output_latex_head_0_format_string +#+BEGIN_SRC d + string paper_size_orientation_latex; + switch (paper_size_orientation) { + case "a4.portrait": paper_size_orientation_latex = set_paper(paper.a4.portrait); break; + case "a4.landscape": paper_size_orientation_latex = set_paper(paper.a4.landscape); break; + case "a5.portrait": paper_size_orientation_latex = set_paper(paper.a5.portrait); break; + case "a5.landscape": paper_size_orientation_latex = set_paper(paper.a5.landscape); break; + case "b4.portrait": paper_size_orientation_latex = set_paper(paper.b4.portrait); break; + case "b4.landscape": paper_size_orientation_latex = set_paper(paper.b4.landscape); break; + case "letter.portrait": paper_size_orientation_latex = set_paper(paper.letter.portrait); break; + case "letter.landscape": paper_size_orientation_latex = set_paper(paper.letter.landscape); break; + case "legal.portrait": paper_size_orientation_latex = set_paper(paper.legal.portrait); break; + case "legal.landscape": paper_size_orientation_latex = set_paper(paper.legal.landscape); break; + default: paper_size_orientation_latex = paper_type_latex.a4_portrait; + } +#+END_SRC + +***** set color links + +#+NAME: output_latex_head_0_format_string +#+BEGIN_SRC d + string links_mono_or_color_set = links.mono.strip; + if ( + (doc_matters.opt.action.latex_color_links) + || (paper_size_orientation == + "a4.landscape" || + "a5.landscape" || + "b4.landscape" || + "letter.landscape" || + "legal.landscape") + ){ + links_mono_or_color_set = links.color.strip; + } +#+END_SRC + +***** format latex head, open #+NAME: output_latex_head_0_format_string #+BEGIN_SRC d @@ -1239,14 +1309,15 @@ string latex_head(M)( %%%% LaTeX output last Generated on: %s %%%% %s %s +\usepackage{geometry} #+END_SRC ***** paper type (a4, letter, ...; ( portrait | landscape )) -- paper.a4_portrait -- paper.a4_landscape -- paper.us_letter_portrait -- paper.us_letter_landscape +- paper_type_latex.a4_portrait +- paper_type_latex.a4_landscape +- paper_type_latex.us_letter_portrait +- paper_type_latex.us_letter_landscape #+NAME: output_latex_head_0_tex #+BEGIN_SRC latex @@ -1534,12 +1605,12 @@ string latex_head(M)( doc_matters.opt.action.debug_do ? "" : doc_matters.generator_program.stime.strip, doc_matters.generator_program.project_name.strip, doc_matters.generator_program.url_home.strip, - paper.a4_portrait.strip, + paper_size_orientation_latex.strip, margins.portrait.strip, multicol.portrait.strip, lang.codes[doc_matters.src.language]["xlp"], "english", - links.mono.strip, // links.color.strip, + links_mono_or_color_set, doc_matters.conf_make_meta.meta.title_full.strip, doc_matters.conf_make_meta.meta.creator_author.strip, doc_matters.conf_make_meta.meta.classify_subject.strip, @@ -1562,8 +1633,9 @@ string latex_head(M)( #+NAME: output_latex_body #+BEGIN_SRC d string latex_body(D,M)( - const D doc_abstraction, - M doc_matters, + const D doc_abstraction, + M doc_matters, + string paper_size_orientation, ) { string _latex_body = ""; bool _multicolumns = false; @@ -1656,7 +1728,7 @@ string latex_body(D,M)( _txt = _txt.codeblock(obj, doc_matters); goto default; case "table": - _txt = _txt.table(obj, doc_matters); + _txt = _txt.table(obj, doc_matters, paper_size_orientation); goto default; // TODO default: _latex_body ~= _txt ~ "\n\n"; @@ -1768,7 +1840,8 @@ string latex_body(D,M)( #+NAME: output_latex_tail #+BEGIN_SRC d string latex_tail(M)( - M doc_matters, + M doc_matters, + string paper_size_orientation, ) { #+END_SRC @@ -1828,7 +1901,7 @@ if flags.length==0 \ #{cmd} --paper-size=a5 --out=~/test WOK end -paper_size = (flags.inspect.match(/"--paper-size=(a4|a5|b5|letter|legal)"/)) ? $1 : "a4" +// paper_size_orientation = (flags.inspect.match(/"--paper-size=(a4|a5|b5|letter|legal)"/)) ? $1 : "a4" out_path = Dir.pwd if (flags.inspect.match(/"--out=\S+"/)) out_path = flags.inspect.match(/"--out=(\S+)"/)[1] @@ -1862,7 +1935,7 @@ if texfiles_with_path.length > 0 FileUtils::mkdir_p(_out_path) end end - texpdf_cmd = %{xetex -interaction=batchmode -fmt=xelatex -papersize=#{paper_size} #{texfile_with_path}\n} + texpdf_cmd = %{xetex -interaction=batchmode -fmt=xelatex #{texfile_with_path}\n} puts texpdf_cmd 2.times { |i| system(texpdf_cmd) } if (FileTest.file?(%{#{pwd}/#{file_basename}.pdf})) && (FileTest.directory?(_out_path)) diff --git a/org/spine.org b/org/spine.org index 4b66711..79787c2 100644 --- a/org/spine.org +++ b/org/spine.org @@ -368,6 +368,7 @@ bool[string] opts = [ "html-seg" : false, "html-scroll" : false, "latex" : false, + "latex-color-links" : false, "light" : false, "manifest" : false, "hide-ocn" : false, @@ -377,6 +378,7 @@ bool[string] opts = [ "parallel" : false, "parallel-subprocesses" : false, "pdf" : false, + "pdf-color-links" : false, "quiet" : false, "pod" : false, "serial" : false, @@ -432,6 +434,7 @@ auto helpInfo = getopt(args, "html-seg", "--html-seg process html output", &opts["html-seg"], "html-scroll", "--html-seg process html output", &opts["html-scroll"], "latex", "--latex output for pdfs", &opts["latex"], + "latex-color-links", "--latex-color-links mono or color links for pdfs", &opts["latex-color-links"], "light", "--light default light theme", &opts["light"], "manifest", "--manifest process manifest output", &opts["manifest"], "hide-ocn", "--hide-ocn object cite numbers", &opts["hide-ocn"], @@ -442,6 +445,7 @@ auto helpInfo = getopt(args, "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"], "quiet|q", "--quiet output to terminal", &opts["quiet"], "pdf", "--pdf latex output for pdfs", &opts["pdf"], + "pdf-color-links", "--pdf-color-links mono or color links for pdfs", &opts["pdf-color-links"], "pod", "--pod spine (doc reform) pod source content bundled", &opts["pod"], "serial", "--serial serial processing", &opts["serial"], "show-summary", "--show-summary", &opts["show-summary"], @@ -546,6 +550,9 @@ struct OptActions { @trusted bool latex() { return (opts["latex"] || opts["pdf"]) ? true : false; } + @trusted bool latex_color_links() { + return (opts["latex-color-links"] || opts["pdf-color-links"]) ? true : false; + } @trusted bool odt() { return (opts["odf"] || opts["odt"]) ? true : false; } diff --git a/src/doc_reform/io_out/latex.d b/src/doc_reform/io_out/latex.d index 8ec144b..a021ee2 100644 --- a/src/doc_reform/io_out/latex.d +++ b/src/doc_reform/io_out/latex.d @@ -18,17 +18,27 @@ template outputLaTeX() { struct A4 { auto portrait() { struct V { - uint w = 160; - uint h = 228; - uint img_px = 450; + const uint w = 160; + const uint h = 228; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "12pt"; + string name = "a4paper"; + uint img_px = 450; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 238; - uint h = 160; - uint img_px = 300; + const uint w = 238; + const uint h = 160; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "11pt"; + string name = "a4paper"; + uint img_px = 300; + bool is_portrait = false; } return H(); } @@ -39,17 +49,27 @@ template outputLaTeX() { struct A5 { auto portrait() { struct V { - uint w = 112; - uint h = 162; - uint img_px = 280; + const uint w = 112; + const uint h = 162; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "a5paper"; + uint img_px = 280; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 152; - uint h = 100; - uint img_px = 190; + const uint w = 152; + const uint h = 100; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "a5paper"; + uint img_px = 190; + bool is_portrait = false; } return H(); } @@ -60,17 +80,27 @@ template outputLaTeX() { struct B4 { auto portrait() { struct V { - uint w = 140; - uint h = 204; - uint img_px = 356; + const uint w = 140; + const uint h = 204; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "b4paper"; + uint img_px = 356; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 200; - uint h = 130; - uint img_px = 260; + const uint w = 200; + const uint h = 130; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "b4paper"; + uint img_px = 260; + bool is_portrait = false; } return H(); } @@ -81,17 +111,27 @@ template outputLaTeX() { struct Letter { auto portrait() { struct V { - uint w = 166; - uint h = 212; - uint img_px = 468; + const uint w = 166; + const uint h = 212; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "letterpaper"; + uint img_px = 468; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 226; - uint h = 166; - uint img_px = 290; + const uint w = 226; + const uint h = 166; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "letterpaper"; + uint img_px = 290; + bool is_portrait = false; } return H(); } @@ -102,17 +142,27 @@ template outputLaTeX() { struct Legal { auto portrait() { struct V { - uint w = 168; - uint h = 286; - uint img_px = 474; + const uint w = 168; + const uint h = 286; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "legalpaper"; + uint img_px = 474; + bool is_portrait = true; } return V(); } auto landscape() { struct H { - uint w = 296; - uint h = 166; - uint img_px = 420; + const uint w = 296; + const uint h = 166; + string width = format(q"┃%dmm┃", w); + string height = format(q"┃%dmm┃", h); + string font_size = "0pt"; + string name = "legalpaper"; + uint img_px = 420; + bool is_portrait = false; } return H(); } @@ -598,20 +648,25 @@ string table(O,M)( string _txt, O obj, M doc_matters, + string paper_size_orientation, ) { if (obj.metainfo.is_a == "table") { auto _t = _txt.tablarize(obj); string _table = _t[0]; string _t_n = _t[1]; - string papertype = "a4"; uint pw = 0; - switch (papertype) { - case "a4": pw = (paper.a4.portrait.w - 20); break; - case "a5": pw = (paper.a5.portrait.w - 20); break; - case "b4": pw = (paper.b4.portrait.w - 20); break; - case "letter": pw = (paper.letter.portrait.w - 20); break; - case "legal": pw = (paper.legal.portrait.w - 20); break; - default: pw = 0; break; + switch (paper_size_orientation) { + case "a4.portrait": pw = (paper.a4.portrait.w - 20); break; + case "a4.landscape": pw = (paper.a4.landscape.w - 20); break; + case "a5.portrait": pw = (paper.a5.portrait.w - 20); break; + case "a5.landscape": pw = (paper.a5.landscape.w - 20); break; + case "b4.portrait": pw = (paper.b4.portrait.w - 20); break; + case "b4.landscape": pw = (paper.b4.landscape.w - 20); break; + case "letter.portrait": pw = (paper.letter.portrait.w - 20); break; + case "letter.landscape": pw = (paper.letter.landscape.w - 20); break; + case "legal.portrait": pw = (paper.legal.portrait.w - 20); break; + case "legal.landscape": pw = (paper.legal.landscape.w - 20); break; + default: pw = 0; break; } // auto textwidth = (pw - 24); string _colw = ""; @@ -681,15 +736,22 @@ string table(O,M)( return _txt; } string latex_head(M)( - M doc_matters, + M doc_matters, + string paper_size_orientation, ) { - struct paperType { + struct paperTypeLatex { string a4_portrait; string a4_landscape; + string a5_portrait; + string a5_landscape; + string b4_portrait; + string b4_landscape; string us_letter_portrait; string us_letter_landscape; + string us_legal_portrait; + string us_legal_landscape; } - auto paper = paperType(); + auto paper_type_latex = paperTypeLatex(); string _footer(M)(M doc_matters) { string _ft = "\\lfoot[\\textrm{\\thepage}]"; string _ft_1 = format(q"┃{\tiny \href{%s}{%s}}┃", "http://sisudoc.org", "SiSU",); @@ -718,26 +780,6 @@ string table(O,M)( } return _ft; } - paper.a4_portrait = format(q"┃ -\documentclass[12pt,a4paper,titlepage]{scrartcl} -\setlength{\textheight}{228mm} \setlength{\textwidth}{160mm} -┃", - ); - paper.a4_landscape = format(q"┃ -\documentclass[11pt,a4paper,landscape,titlepage,twocolumn]{scrartcl} -\setlength{\textheight}{160mm} \setlength{\textwidth}{238mm} -┃", - ); - paper.us_letter_portrait = format(q"┃ -\documentclass[12pt,letterpaper,titlepage]{scrartcl} -\setlength{\textheight}{212mm} \setlength{\textwidth}{166mm} -┃", - ); - paper.us_letter_landscape = format(q"┃ -\documentclass[11pt,letterpaper,landscape,titlepage,twocolumn]{scrartcl} -\setlength{\textheight}{166mm} \setlength{\textwidth}{226mm} -┃", - ); struct paperMargins { string portrait; string landscape; @@ -786,12 +828,64 @@ string table(O,M)( linkcolor=myred, %% \href{...} and \pageref{...} ┃", ); + string set_paper(P)(P paper_set,) { + string paper_type_description; + if (paper_set.is_portrait) { + paper_type_description = format(q"┃ + \documentclass[%s,%s,titlepage]{scrartcl} + \setlength{\textheight}{%s} \setlength{\textwidth}{%s} + ┃", + paper_set.font_size, + paper_set.name, + paper_set.height, + paper_set.width, + ); + } else { + paper_type_description = format(q"┃ + \documentclass[%s,%s,landscape,titlepage,twocolumn]{scrartcl} + \setlength{\textheight}{%s} \setlength{\textwidth}{%s} + ┃", + paper_set.font_size, + paper_set.name, + paper_set.height, + paper_set.width, + ); + } + return paper_type_description; + } + string paper_size_orientation_latex; + switch (paper_size_orientation) { + case "a4.portrait": paper_size_orientation_latex = set_paper(paper.a4.portrait); break; + case "a4.landscape": paper_size_orientation_latex = set_paper(paper.a4.landscape); break; + case "a5.portrait": paper_size_orientation_latex = set_paper(paper.a5.portrait); break; + case "a5.landscape": paper_size_orientation_latex = set_paper(paper.a5.landscape); break; + case "b4.portrait": paper_size_orientation_latex = set_paper(paper.b4.portrait); break; + case "b4.landscape": paper_size_orientation_latex = set_paper(paper.b4.landscape); break; + case "letter.portrait": paper_size_orientation_latex = set_paper(paper.letter.portrait); break; + case "letter.landscape": paper_size_orientation_latex = set_paper(paper.letter.landscape); break; + case "legal.portrait": paper_size_orientation_latex = set_paper(paper.legal.portrait); break; + case "legal.landscape": paper_size_orientation_latex = set_paper(paper.legal.landscape); break; + default: paper_size_orientation_latex = paper_type_latex.a4_portrait; + } + string links_mono_or_color_set = links.mono.strip; + if ( + (doc_matters.opt.action.latex_color_links) + || (paper_size_orientation == + "a4.landscape" || + "a5.landscape" || + "b4.landscape" || + "letter.landscape" || + "legal.landscape") + ){ + links_mono_or_color_set = links.color.strip; + } string _latex_head = format(q"┃%%%% spine LaTeX output %%%% Generated by: %s %%%% D version: %s %%%% LaTeX output last Generated on: %s %%%% %s %s +\usepackage{geometry} %s %s \setlength{\marginparsep}{4mm} @@ -967,12 +1061,12 @@ string table(O,M)( doc_matters.opt.action.debug_do ? "" : doc_matters.generator_program.stime.strip, doc_matters.generator_program.project_name.strip, doc_matters.generator_program.url_home.strip, - paper.a4_portrait.strip, + paper_size_orientation_latex.strip, margins.portrait.strip, multicol.portrait.strip, lang.codes[doc_matters.src.language]["xlp"], "english", - links.mono.strip, // links.color.strip, + links_mono_or_color_set, doc_matters.conf_make_meta.meta.title_full.strip, doc_matters.conf_make_meta.meta.creator_author.strip, doc_matters.conf_make_meta.meta.classify_subject.strip, @@ -982,8 +1076,9 @@ string table(O,M)( return _latex_head.strip; } string latex_body(D,M)( - const D doc_abstraction, - M doc_matters, + const D doc_abstraction, + M doc_matters, + string paper_size_orientation, ) { string _latex_body = ""; bool _multicolumns = false; @@ -1057,7 +1152,7 @@ string table(O,M)( _txt = _txt.codeblock(obj, doc_matters); goto default; case "table": - _txt = _txt.table(obj, doc_matters); + _txt = _txt.table(obj, doc_matters, paper_size_orientation); goto default; // TODO default: _latex_body ~= _txt ~ "\n\n"; @@ -1144,7 +1239,8 @@ string table(O,M)( return _latex_body; } string latex_tail(M)( - M doc_matters, + M doc_matters, + string paper_size_orientation, ) { string _latex_tail = format(q"┃ @@ -1156,8 +1252,9 @@ string table(O,M)( return _latex_tail; } void writeOutputLaTeX(T,M)( - const T latex_content, - M doc_matters, + const T latex_content, + M doc_matters, + string paper_size_orientation, ) { auto pth_latex = spinePathsLaTeX(doc_matters); try { @@ -1173,9 +1270,9 @@ string table(O,M)( (pth_latex.latex_path_stuff).mkdirRecurse; } if (!(doc_matters.opt.action.quiet)) { - writeln(" ", pth_latex.latex_file_with_path); + writeln(" ", pth_latex.latex_file_with_path(paper_size_orientation)); } - auto f = File(pth_latex.latex_file_with_path, "w"); + auto f = File(pth_latex.latex_file_with_path(paper_size_orientation), "w"); f.writeln(latex_content.head); f.writeln(latex_content.content); f.writeln(latex_content.tail); @@ -1200,9 +1297,22 @@ string table(O,M)( string tail; } auto latex = LaTeX(); - latex.head = latex_head(doc_matters); - latex.content = latex_body(doc_abstraction, doc_matters); - latex.tail = latex_tail(doc_matters); - latex.writeOutputLaTeX(doc_matters); + foreach (paper_size_orientation; [ + "a4.portrait", + "a4.landscape", + "letter.portrait", + "letter.landscape", + "a5.portrait", + "a5.landscape", + "b4.portrait", + "b4.landscape", + // "legal.portrait", + // "legal.landscape", + ]) { + latex.head = latex_head(doc_matters, paper_size_orientation); + latex.content = latex_body(doc_abstraction, doc_matters, paper_size_orientation); + latex.tail = latex_tail(doc_matters, paper_size_orientation); + latex.writeOutputLaTeX(doc_matters, paper_size_orientation); + } } } diff --git a/src/doc_reform/io_out/paths_output.d b/src/doc_reform/io_out/paths_output.d index 83c9728..7cd9051 100644 --- a/src/doc_reform/io_out/paths_output.d +++ b/src/doc_reform/io_out/paths_output.d @@ -491,8 +491,12 @@ template spinePathsLaTeX() { string latex_path_stuff() { return ((base.chainPath(base_filename(doc_matters.src.filename))).asNormalizedPath).array; } - string latex_file_with_path() { - return ((base.chainPath(base_filename(doc_matters.src.filename) ~ "." ~ doc_matters.src.language ~ ".tex")).asNormalizedPath).array; + string latex_file_with_path(string paper_size_orientation) { + return ((base.chainPath(base_filename(doc_matters.src.filename) + ~ "." ~ doc_matters.src.language + ~ "." ~ paper_size_orientation + ~ ".tex") + ).asNormalizedPath).array; } string images() { string image_dir = "image"; diff --git a/src/doc_reform/spine.d b/src/doc_reform/spine.d index 53161c7..3f422b4 100755 --- a/src/doc_reform/spine.d +++ b/src/doc_reform/spine.d @@ -127,6 +127,7 @@ string program_name = "spine"; "html-seg" : false, "html-scroll" : false, "latex" : false, + "latex-color-links" : false, "light" : false, "manifest" : false, "hide-ocn" : false, @@ -136,6 +137,7 @@ string program_name = "spine"; "parallel" : false, "parallel-subprocesses" : false, "pdf" : false, + "pdf-color-links" : false, "quiet" : false, "pod" : false, "serial" : false, @@ -191,6 +193,7 @@ string program_name = "spine"; "html-seg", "--html-seg process html output", &opts["html-seg"], "html-scroll", "--html-seg process html output", &opts["html-scroll"], "latex", "--latex output for pdfs", &opts["latex"], + "latex-color-links", "--latex-color-links mono or color links for pdfs", &opts["latex-color-links"], "light", "--light default light theme", &opts["light"], "manifest", "--manifest process manifest output", &opts["manifest"], "hide-ocn", "--hide-ocn object cite numbers", &opts["hide-ocn"], @@ -201,6 +204,7 @@ string program_name = "spine"; "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"], "quiet|q", "--quiet output to terminal", &opts["quiet"], "pdf", "--pdf latex output for pdfs", &opts["pdf"], + "pdf-color-links", "--pdf-color-links mono or color links for pdfs", &opts["pdf-color-links"], "pod", "--pod spine (doc reform) pod source content bundled", &opts["pod"], "serial", "--serial serial processing", &opts["serial"], "show-summary", "--show-summary", &opts["show-summary"], @@ -298,6 +302,9 @@ string program_name = "spine"; @trusted bool latex() { return (opts["latex"] || opts["pdf"]) ? true : false; } + @trusted bool latex_color_links() { + return (opts["latex-color-links"] || opts["pdf-color-links"]) ? true : false; + } @trusted bool odt() { return (opts["odf"] || opts["odt"]) ? true : false; } diff --git a/util/dr_tex.rb b/util/dr_tex.rb index a73f07b..767742c 100755 --- a/util/dr_tex.rb +++ b/util/dr_tex.rb @@ -15,7 +15,7 @@ if flags.length==0 \ #{cmd} --paper-size=a5 --out=~/test WOK end -paper_size = (flags.inspect.match(/"--paper-size=(a4|a5|b5|letter|legal)"/)) ? $1 : "a4" +// paper_size_orientation = (flags.inspect.match(/"--paper-size=(a4|a5|b5|letter|legal)"/)) ? $1 : "a4" out_path = Dir.pwd if (flags.inspect.match(/"--out=\S+"/)) out_path = flags.inspect.match(/"--out=(\S+)"/)[1] @@ -49,7 +49,7 @@ if texfiles_with_path.length > 0 FileUtils::mkdir_p(_out_path) end end - texpdf_cmd = %{xetex -interaction=batchmode -fmt=xelatex -papersize=#{paper_size} #{texfile_with_path}\n} + texpdf_cmd = %{xetex -interaction=batchmode -fmt=xelatex #{texfile_with_path}\n} puts texpdf_cmd 2.times { |i| system(texpdf_cmd) } if (FileTest.file?(%{#{pwd}/#{file_basename}.pdf})) && (FileTest.directory?(_out_path)) |