From d00921d1316b85d3e02eacc7e55406c2a4cd082d Mon Sep 17 00:00:00 2001 From: Wikiti Date: Sat, 17 Oct 2020 21:17:05 +0100 Subject: [PATCH 1/2] Basic templates --- Makefile | 46 ++-- style.css | 334 ++++++++++++++++++++++++++++- templates/docx.docx | Bin 0 -> 10151 bytes templates/epub.html | 68 ++++++ templates/html.html | 64 ++++++ templates/pdf.latex | 497 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 989 insertions(+), 20 deletions(-) create mode 100644 templates/docx.docx create mode 100644 templates/epub.html create mode 100644 templates/html.html create mode 100644 templates/pdf.latex diff --git a/Makefile b/Makefile index 49f72b0..2e20363 100644 --- a/Makefile +++ b/Makefile @@ -9,14 +9,15 @@ MAKEFILE = Makefile OUTPUT_FILENAME = book METADATA = metadata.yml CHAPTERS = chapters/*.md -TOC = --toc --toc-depth=2 -METADATA_ARGS = --metadata-file=$(METADATA) -IMAGES_FOLDER = images -IMAGES = $(IMAGES_FOLDER)/* -COVER_IMAGE = $(IMAGES_FOLDER)/cover.png +TOC = --toc --toc-depth 2 +METADATA_ARGS = --metadata-file $(METADATA) +IMAGES = $(shell find images -type f) +TEMPLATES = $(shell find templates/ -type f) +COVER_IMAGE = images/cover.png MATH_FORMULAS = --webtex -CSS_FILE = style.css -CSS_ARGS = --css=$(CSS_FILE) + +# TODO: ?? +CSS_ARGS = --css $(CSS_FILE) # Debugging @@ -29,15 +30,24 @@ CSS_ARGS = --css=$(CSS_FILE) # Combined arguments -ARGS = $(TOC) $(MATH_FORMULAS) $(CSS_ARGS) $(METADATA_ARGS) $(FILTER_ARGS) $(DEBUG_ARGS) +ARGS = $(TOC) $(MATH_FORMULAS) $(METADATA_ARGS) $(FILTER_ARGS) $(DEBUG_ARGS) + PANDOC_COMMAND = pandoc # Per-format options -EPUB_ARGS = --epub-cover-image=$(COVER_IMAGE) -HTML_ARGS = --standalone --to=html5 -PDF_ARGS = -V geometry:margin=1in -V documentclass=report --pdf-engine=xelatex -DOCX_ARGS = +DOCX_ARGS = --standalone --reference-doc templates/docx.docx +EPUB_ARGS = --template templates/epub.html --epub-cover-image $(COVER_IMAGE) +HTML_ARGS = --template templates/html.html --standalone --to html5 +PDF_ARGS = --template templates/pdf.latex --pdf-engine xelatex + +# Per-format file dependencies + +BASE_DEPENDENCIES = $(MAKEFILE) $(CHAPTERS) $(METADATA) $(IMAGES) $(TEMPLATES) +DOCX_DEPENDENCIES = $(BASE_DEPENDENCIES) +EPUB_DEPENDENCIES = $(BASE_DEPENDENCIES) +HTML_DEPENDENCIES = $(BASE_DEPENDENCIES) +PDF_DEPENDENCIES = $(BASE_DEPENDENCIES) #################################################################################################### # Basic actions @@ -62,25 +72,23 @@ pdf: $(BUILD)/pdf/$(OUTPUT_FILENAME).pdf docx: $(BUILD)/docx/$(OUTPUT_FILENAME).docx -$(BUILD)/epub/$(OUTPUT_FILENAME).epub: $(MAKEFILE) $(METADATA) $(CHAPTERS) $(CSS_FILE) $(IMAGES) \ - $(COVER_IMAGE) +$(BUILD)/epub/$(OUTPUT_FILENAME).epub: $(EPUB_DEPENDENCIES) mkdir -p $(BUILD)/epub $(PANDOC_COMMAND) $(ARGS) $(EPUB_ARGS) -o $@ $(CHAPTERS) @echo "$@ was built" -$(BUILD)/html/$(OUTPUT_FILENAME).html: $(MAKEFILE) $(METADATA) $(CHAPTERS) $(CSS_FILE) $(IMAGES) +$(BUILD)/html/$(OUTPUT_FILENAME).html: $(HTML_DEPENDENCIES) mkdir -p $(BUILD)/html $(PANDOC_COMMAND) $(ARGS) $(HTML_ARGS) -o $@ $(CHAPTERS) - cp -R $(IMAGES_FOLDER)/ $(BUILD)/html/$(IMAGES_FOLDER)/ - cp $(CSS_FILE) $(BUILD)/html/$(CSS_FILE) + cp --parent $(IMAGES) $(BUILD)/html/ @echo "$@ was built" -$(BUILD)/pdf/$(OUTPUT_FILENAME).pdf: $(MAKEFILE) $(METADATA) $(CHAPTERS) $(CSS_FILE) $(IMAGES) +$(BUILD)/pdf/$(OUTPUT_FILENAME).pdf: $(PDF_DEPENDENCIES) mkdir -p $(BUILD)/pdf $(PANDOC_COMMAND) $(ARGS) $(PDF_ARGS) -o $@ $(CHAPTERS) @echo "$@ was built" -$(BUILD)/docx/$(OUTPUT_FILENAME).docx: $(MAKEFILE) $(METADATA) $(CHAPTERS) $(CSS_FILE) $(IMAGES) +$(BUILD)/docx/$(OUTPUT_FILENAME).docx: $(DOCX_DEPENDENCIES) mkdir -p $(BUILD)/docx $(PANDOC_COMMAND) $(ARGS) $(DOCX_ARGS) -o $@ $(CHAPTERS) @echo "$@ was built" diff --git a/style.css b/style.css index a58cbb2..d9ba1b0 100644 --- a/style.css +++ b/style.css @@ -1,3 +1,335 @@ /* - * Place your css content here. + * Custom CSS file. Override it as you like. + * + * Credits to @killercup (https://gist.github.com/killercup); Extracted from this Gist: + * https://gist.github.com/killercup/5917178 */ + + h1 { + color: red !important; + } + + html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + color: #444; + font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; + font-size: 12px; + line-height: 1.7; + padding: 1em; + margin: auto; + max-width: 42em; + background: #fefefe; +} + +a { + color: #0645ad; + text-decoration: none; +} + +a:visited { + color: #0b0080; +} + +a:hover { + color: #06e; +} + +a:active { + color: #faa700; +} + +a:focus { + outline: thin dotted; +} + +*::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +*::selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +a::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +a::selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +p { + margin: 1em 0; +} + +img { + max-width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + color: #111; + line-height: 125%; + margin-top: 2em; + font-weight: normal; +} + +h4, h5, h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1.2em; +} + +h5 { + font-size: 1em; +} + +h6 { + font-size: 0.9em; +} + +blockquote { + color: #666666; + margin: 0; + padding-left: 3em; + border-left: 0.5em #EEE solid; +} + +hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid #aaa; + border-bottom: 1px solid #eee; + margin: 1em 0; + padding: 0; +} + +pre, code, kbd, samp { + color: #000; + font-family: monospace, monospace; + _font-family: 'courier new', monospace; + font-size: 0.98em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +b, strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +ins { + background: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background: #ff0; + color: #000; + font-style: italic; + font-weight: bold; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +ul, ol { + margin: 1em 0; + padding: 0 0 0 2em; +} + +li p:last-child { + margin-bottom: 0; +} + +ul ul, ol ol { + margin: .3em 0; +} + +dl { + margin-bottom: 1em; +} + +dt { + font-weight: bold; + margin-bottom: .8em; +} + +dd { + margin: 0 0 .8em 2em; +} + +dd:last-child { + margin-bottom: 0; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; +} + +figure { + display: block; + text-align: center; + margin: 1em 0; +} + +figure img { + border: none; + margin: 0 auto; +} + +figcaption { + font-size: 0.8em; + font-style: italic; + margin: 0 0 .8em; +} + +table { + margin-bottom: 2em; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} + +table th { + padding: .2em 1em; + background-color: #eee; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} + +table td { + padding: .2em 1em; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + vertical-align: top; +} + +.author { + font-size: 1.2em; + text-align: center; +} + +@media only screen and (min-width: 480px) { + body { + font-size: 14px; + } +} +@media only screen and (min-width: 768px) { + body { + font-size: 16px; + } +} +@media print { + * { + background: transparent !important; + color: black !important; + filter: none !important; + -ms-filter: none !important; + } + + body { + font-size: 12pt; + max-width: 100%; + } + + a, a:visited { + text-decoration: underline; + } + + hr { + height: 1px; + border: 0; + border-bottom: 1px solid black; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { + content: ""; + } + + pre, blockquote { + border: 1px solid #999; + padding-right: 1em; + page-break-inside: avoid; + } + + tr, img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page :left { + margin: 15mm 20mm 15mm 10mm; +} + + @page :right { + margin: 15mm 10mm 15mm 20mm; +} + + p, h2, h3 { + orphans: 3; + widows: 3; + } + + h2, h3 { + page-break-after: avoid; + } +} diff --git a/templates/docx.docx b/templates/docx.docx new file mode 100644 index 0000000000000000000000000000000000000000..d9ce0db29f1b7a66403d22777f3c7ee14e3ba552 GIT binary patch literal 10151 zcmZ`lVcl-_Rx9A8}m ztx%zbG(Elfj)k16KARDQe3w@tv&4;83m4Up&RU-2!>IoSmNRo*9@`5R2-3$;ZIX0} z&4O)(VGuPY!Y$jGxAu4WM)x)72RhxRd%=`I>O3iKRPDCm%rM&yh@RPVY3f)qb(7xH z>VdX234R}e5?VEVLBkjQARmrsD0(>Nq+e(rU36Z+sPavVfb>T-Ono!JSnwcMet4{X z<-{F!3dwuv+MvRfQ+S2UeOXa+vr_m3^`LQGcpxB`F~MNxQBl4$b+h#LK~U$&7ssfE zxpzs1bc}?3;-X*BD#Ldy3lrN|yZf4HUDdsf^v9|$4tJ^E33!>pXVS>wFvwVhHWT~) zqU$H=%^EMPhqDAT;c})ZXC}s9_sWD3D@Yb3 ziQ9XG0w2l5PHM^=8&T4B)oE1brah4_uuan+{0ulSmy=vFBvMkUV^Bn|`q%B}=yqBA z@{C^3eVuSiu7TqdeXNbP`-sCYFPixjzXz1h*ZdSbiIb( zIdpgtX9i7w?wV*X7s)av&FYkWr!mui`Qt0zP@)yLnuaL1eVX%dv@Uc}&Q|jIbL@Jt zTa79xL1Dn-Xv$v@WxJ&nI05j3#Ov`ktU z&mP<)$kny?PCc2p3=w82+hN4U)Teuc{pl8PQ$7QnMxOzlmSo$MW)nT#A9 ze&ubp>WJbeX28c=I?!skoJX0H9uTk%23Jax#o(2w#oc5^0OdDfHxok29Y6DRbo|5| zz4PaR?F9-8-r4J2M-C=LhtJkumNi-{?PD278q+R{4{b%wwh-f;;Gi>QqDsf=!?wgKXdm3~3X^voj&Xe#0rmN0 zC$vHPKskys9>FYynvN3=Td`An(~wUgxtr_5_>^qJ#8DA~_f$CF7@>JI124Em(fJu= zlN}c#hu5g2gEg~Np!`@VO7l@uUJI)BHBAfNW<^s+8}bq;+fVH%`O6ibj`vu+wVny& zmfBi8*?v9U%i){G@)hmQql&wOJCnGzAh*W40Ex&~Vw`GCxG70sOMSEk_vzII^q&z? zOZ0k0{Tvas=ZK*FJ0d3bPG-MCQk0-)9mtFsa&}8caf{#RLe%piDq7!`InBhx9mr!V zHU=xhyW-bnS)M)Fz6LjV%M-hwre0oPl|bU4kKZ9Kkx~G~&Lw(uitaOe{0+SFK(C)+ zYoI5S4f{>pX5wP8z?NIM8&E5tcArmq)FOV8WfiwrE39b6c;qg}7ChC%Hx>(uO3SbX zwGCMDkFgNJdofx(MQl5e827XklT?lEN=5dy zWmZ?WK{eCaV_E5}AoCdbl&k}~spb3mwfbI@HOf_R#DS?nu|>Rv&`;%G2fuF3;=kgr zJTGjccQ+TIaHMw9H*E55z08=wTOD0wruJ$?;<7W0 z+b7CvVxHf@$2x#q3^yADXfE#jAI}|*ZVs_)MK;rwN5oWQ!7WR39cM4s^{(nM36XEi zflv(YhD)5gDY&Q>B~77?QQGi3_tw?oGq`e=cN}!w_cy5)7<^1x2U$BJWhgMyESm6^EeKQO-PoL&V3{>vi19A*)5sD1Cl+BObaMy@BOMEDAw=>ZKZ zJsg?5oh)QB94Z|ewHjF5` z-0eQkFQ7?Y2g_d(cm=*YQOFg2j)y=NVV^%RGQ-9`tLvxs#--X*U=Xdp!Tje;GWTk3 zVZVx_H{zVOqwhqn@%GLLQH17Ku|AV+UVWlX8Z=M`eh1UMSqho_YdZuA@*48qKK(9Q#F8AWpzafIwI~sizQ4{ zd-SJne~VyWOGP1@Y1H;f)ab*|rUR+HZv|A3C5VqhX}+eBzBYl>lHIMYQQxvkFo@k$( zh(6qJI>6cc7D@F8LVWB^^PNinX$ytdCGno~{q$sSn+?;!Y((n(f<<-z$`s_il?gIU z5n-w8;cV!*YuKj80?biNI2<7>&J*=)E?h)-Ui{ctv17Z7qHE$D)25aXJFg0@)zMsoF@E6S-3n8 zDtekAcM4Krba`K`Rexd?lo0aA=*nYm47MMZ)_L(d{n92r{NBRHX>SVD?dFyiALE@+ z7{4jHjx1b=NNvlL#LYX-)OTu-;`?ADx4csiB5#$68;PFnTy?c=_(4r2<|q(XKSqQx z2E!2jxq`Z5-cqLub4KEhFU;GFcOPG)zQqw;J#Rwi>YFr8@HG&&Im(Ez%X|}KXqImG z=)JQfoqB6!iCN3nc0F!i2^C;!l--X&9Q$E|Su$E=|_Gr|nL5*?h zcq|y%b`UeT`W#gCi3}<>>V`dSbo=eVU@Ps!@4xA4_Oob$5h|a38h1fD#a84A&0_KQ z%d<3bgxDD2Dav_N0#Jk{NXrTV@~}_J0)(cjHL9Pk9(1oV&_?a^547}YI@3NE9EttV zI3xJ;6!2P==FNPr5}oj1VCc`s*nZ(HCZrWUI%9?;ZY^$0 zxg7?NzthvgQ?Qg3M;;bL zAu0yf>O~DUf$&%y5)`$oR4^)k$TX;yX;hiYH-^lfg14F>Z&DdUlq zi*=Som|mEBob{QU59;+k2Vl)F+CgZh9`(;qI^$YxyF7=|9_o)!+Pm191m`7dLi4y zM&X`3x_027-!_da zBd7z`q?J`P6_VDKdI1AUk`V#XsX@#JvNHiehNP78ZTZ)T zONge`$wJyy=18g9AFd+Vx1J9AJovZn7IJnLe#{lVE6-5{Cpggm|1WWtK$j$sC zD=1N}q!awl7$LIqqpUn{GpBz@*Q#}!%NC7aLUb$rNloY(Qu-`7r z9b&kU2uHmQiXvyD`ue51$k7N@S5%RV?J1NkhjD}Xbv>oqfv)2s7pQLCaQ{aEmcgy= zBMsyJ8VyY#*t}GgQ+K^=C9W}&tSo0B^q3dY{Ju^s6z?9LfT`#aM1Jk)QlJWP=AKx9 zn?5~Kg;C8}cC9A+%oQ|rxR{6~ov7O^3+i|v;v06GesO&Ub>wjX>rL%AfijaBkF2q8 zYMK$f&*5Z6O|Bdre1~~mjLU;XM^8GksA7M(@1UGf;Kl86bv3AD=N|S?Pq2JmKL~!# zR$I7#WviX5t+AQYTRV$i+1j5n_WY@fGAEjUpxY@hqh&`l?6LU^30&sf-skiMmC`aD)1h3n9Tk;XGfG9ghh=*MwFd333P!o9 zOUPuy8&c7dT}m;F%1p|EGH$h;a_u!`@J@>|SYe_q#OUj_^Q`t)F6(d-wX)bFVFH#PVvfYwSy9jtAJn7ix zMFx0bIuTNkka=`FcRi7~8=_Qvp0o9O@9OJbvoSlXC*kf`F?(dlcBm_64<6jtOr3PK zX#5S=WM+9Pr4UdO?iLSD@z2uR?*<;ZM7PC4fp?0+d;VDcp|^bgln%YyQt?FQX!8E> z+1*gS#=-CjmI(4YFjNYa%tmSQ{^8l(!j(4@x$+M`F0Yq1;% zVwOp2?DA!@dT&?mdL!dBE|B^?Ir7VjPynBlUD_QOKXv9P3BZ{2R6kC$FU$k)@c zxfVDM+`v3H<+wv-#ntG~q6(U%VRrD6$+N5+473u|Gf67kKU<`NGg|0OE^F2VBdW|$ z@SIB31917v%)XPR%eA4!rMnGY1vEh@B83!d(l5+s-Wk|SS5+jQwo)_&=(hLXGD%=SuE<(5bb1Zf3_^Ys!p z#}bC&CRi3DhXs#DRl!BceTWCbD3>{JdJCZ?LG~O(IFyC~#5Ka^-qwFPmuJ;FfqcVk zC!GJ7Vn~~_e{D6RE}JL=IZ*~BC`@fQ+-G|)bzD6}8+p@JHOU#@Rp_A+RF%7febj(1 zJsgs$i7q9%$5|y(tdbxe58>RQN$(LC(P5$u7waU7)(~KK-nhv{{po;fPkuk^#A@S8 z$1jx2QB&hMaiFbBSVR-5esGyYEPbmyX=mQaAU7SewRg+fCDx`kq{d8{pUsLBffj*F z98|8KRE$IKxwiCkDAOy@yh}Dya^J^~Gb?A$%RPIl!7Jlw{K;@J^ER~jev2O$#^Q%k zXphUJ(5DH{PxpAf^T@n`Q*VD(9pC!75wPiExzP7I(P%7eI?z`akfR(8BAdZGe#II_ zFEIf2YE>4~*PF9!zP<~H<*em++nCXS9drdf9$uu@dkqV_yEz6F7`}Q1N^ynKPgJvL z5sm*5%%J(fzjlAH~s|7v3VvD@=3}{-}T;eFz67hKs zUWsA?b%8_w0V6fl|9&@x?VW6x&Kc@Oo%0T_SC#YT4Xo(MTEzTdDE_flh0#KzR`Y-- z_VJw7hVdglB0YA}qE)Chk>(YC7sgF(pW1LMJ*h{@y^^v?2bdW*!jxj)bwo>*$9O|H z>0q?6Y2&Eh$-Ps;sX<_7*Ppv4m{5H@>v^{fK3|ys*){HF#%llCIC?RBD9@!?{Ciff zladWJAmS2D;ef2L8(hAQBE`mjrx877LR3VA=jxlJ8Yk0PA3{8Ri0oHq2IwGgDS{8O z>-MK#DKdHKAPDfIYAC0#;}(| zvUx3i)YlhDkLAP8S{zZDt=-X%G@}=dj>Zryj+UG!bzn*K%ewfkUoggxsO)O!FkoN< zoM2$6|5=T*i-*nM9OE=Y*Lj&6^ZmwmI(}b!aA)}8Bo{bss`TNeHBqVOVH_J1c(E+=gYys{4a+jN+YvuTZG|9jF3O;f- zbiMJt`{B}a7m1oqIm^gvbHzvxbT1 zq`GDbnZC;M&AeXCK_5-Ob^%X|oP3i8Cgt{?IiJg9G>(A+z$|DEr;f02DOJ>G#=qbb z%s;h4J396g!z#9$WJ%Fpm($3z6!n}oS@g$+Z%Q-ULL;C)#zt6Ze4rI5*zDvejUOx> zj@MhZ8C4Vxy$ZVbhzR_gqq?4C{RY4m8IFPA;32gNdob1lh&pK^ za$n!@Ee=!eGvM@L!_6bu@c`_9JID7p&*kX5Me@x2+4Ui!y6_Vv8g^H9y@;_dLPy+1 zs`4lS1j1{~pyQpVY13MBQ#qRTh}y2tKp(zHAPl&CebUhMCfs3HE%dN=rD>MDO`2fl zdBi&==eyDJ;v`kMaOZl)_i&%MD!4|Z?tnr8gobr6?A3{1@`QUJA~fhKPLVX!F{stc zHS+Q#0i!?%@&TDVY8nfp2_O8-|M+K+JdmrjCtYMR`7(Op~!+A>DRK+p>& zsWR6)w(<8>n>4fduuQ3mO~6;D5n1e4vjkG!3YM-h=u6*C^Av?qJuvkn*%TYwWiNHP ztv}xeIF_yLu^vvHz^=LZYP+pGILFy-@q`5Lt22BItZ5fTBte^d0`bW0aiGL>na6!5 z+|gmTCE8v=hPo78DZQbK*U6U5k5KmHk!c*?I7CwI4HbWrb+)xukc45%pg5B&>9Aa zQal?2RJ4#}ChmnyzRX6x%m>sFZSX=018u-hb>dC^gr7nObrcAHYsn`}%O}jrqZe5c zf}xH@>SbdKvUmk22YBsk%_DM03m0k*7y9ctC!5rUu-BO_X#dv}iV}bmb}LzF6;=#9 z9P_M)T9TEA;W!OLKejF`?PM|b3%RNnhaWnG5kSsybAZl@lrPM?8{Oiv=Y!##Nu?cD_w zsZn$1nmCf{MyiSAkJAHMg-Xc@_WR{cTlhckdzmW0raCp`g(&F~AE;5sKWg*Tos zFcBZP;oW~|mJUOsAG8#Chfw61waMx6Yy*>$x;zg!L?oLM^ z5IVHWW=%fh(i9n;#%KnIq#q8H%h*BIuzm-z-`o_Hvd(FUb7abpS^Ki2(aM{Uv{X(iKOkBl28sn!YWs95AQo0$)-l|xdZ;g5P?RKRwRQeLK7??aBBs5 zDW}^h)%D`CZ9}H$MPBM<5R8JmVgx(bWT*OdQx*c++awZ+Gq^mfkw1|adY=?%+;CwB z$FZh@;<$F#qT^KHWl}J)vg-~vhbPk>bc`Uh=)3lubj~5O z(R5tTT~8h67DtoBzZoFiHeH~LzRGC-$%lh#gB8{Pn0bp%DO1boJ(-*1-taNm>QgZv z+^BEe2}xWui-|mLbkUNs6e^ zRHt|-_0y^T!-`FaUKJ(4=NfjY?Xd-F1L&Wu$S@m=~r4HXCx zx-4}!Lx)qv5hC_$P+Q&}O;?}Fy>#86B#eoyuhLsga(rUM{VDSz_nz~l31;Pq{yx~k zlk`Ws4o;k_G^K!BNvtk!ZGg~vJzwRu5>Dk%} z_A8vYooAYWw&pq;I@bVRiIc_C`47nG&0?_);&L|BDx`-Loyez--S3UoYCa*HG<~Y6 z6h=Ime$22TYC<_Mz?B$AH&csFY+8xnfR!rD*?-)Vo9^`99M$B6* z5R3_|a`j^WI9Xd|gop?j3ih6A#6OyVxY;vnH$+nrn-3Ga=6bb<^psZ`MvsdlZ?UM~ z)u3l(X^x-bAJ~&83s5Bzw5i(;@Dij$0d>tA@;3iT*Bi!v={&^*A&`f zfyz;q2sC~@o2n$RkJpS2g*(bfmbC|#tfJd~oYbGn5LE-xBXoGcP+UKIy&SiLq^`7^ zYUi4{jMSZ)QsDDwjGpFEgO>c4JV~L)aaw{h^55x7}_g~)D0w{h|+d(a}pS8 zNr=L;18`BQb-gIMi?tr&f-FU-mPip)V`oFjcl4tb*4zp38F;oyrPbn=`zQx0#_BcE zDCNqn@}w*X5{2kvu$f(T>K{&`#Td+0kuOzl=~^z-@d-ZdP4Uf_G@H^#S)0@fEI{C7 zI_0vGbP))65Ga1pOPYWDp7NuUvdezBT5Fe%YrF1t`5|8iKFUgI5kr2cGY!opu)J!l zXzi!6Vwpb~)~g4Kq*!MkEW_?RPnf8P*jl(-u{3Fc7*(|MH*Vb`qOBigv>JQo`Z48h z=dyHHsVE5}h>k3-DnE170}3U<7c?4G(aOuL^*r@l6+_;rdBSjBWAudKBu1n>r9tWz1FevJsOxt^(B%1_#?Nv!7HkMD63G5QGVAX6MUbt@FP(g zu~XoO@$~@_0)${8W(ycVF-y&zoE);TboU`|kDY|e7&Y9{#FHmnA~IH4oC_U%2*e-> z-C>jb_mScC3f4A+NKYf788(dkKUQ^qCcE6Txdu_?ow33F4w-W6}iYAC=*!&%t)Y2!$5pQBOKTba?erq%j z_C24RJ}*m%8b5xeGtoC!1_7THe3{e|VDb!`UK{QOIoZ=Jj$tiAoB8t5FCNWXBnY#w z;Q>e7rnn;C$KP>~H%Gwk4dGdP><(2X)H;hR66T_}@*6glB2CpA)(Aa$$h~%El+iff z+fbGRf0kqa|1q5Bg7UB5|1p&F(!k3Zk>BXT=aT%diIJDUms1qKf$h(4_}^CZKQk3C z(JwpxztIZMErI`{|I`0}34hty{tYjD=4!v;|Lt?XH1M*c{M&%-b8Y@#{pFYNm#wJZ zaA$=7t1fY8~Gpnzm@uz@Rx%2Z}@sUedzfrg)x-;$Nm-l0;=W=;vJhHNyk| NLwepd!Q{W5{s*-Yso($r literal 0 HcmV?d00001 diff --git a/templates/epub.html b/templates/epub.html new file mode 100644 index 0000000..4f5bd66 --- /dev/null +++ b/templates/epub.html @@ -0,0 +1,68 @@ + + + + + + + $pagetitle$ +$if(highlighting-css)$ + +$endif$ +$for(css)$ + +$endfor$ +$for(header-includes)$ + $header-includes$ +$endfor$ + + +$if(titlepage)$ +
+$for(title)$ +$if(title.type)$ +

$title.text$

+$else$ +

$title$

+$endif$ +$endfor$ +$if(subtitle)$ +

$subtitle$

+$endif$ +$for(author)$ +

$author$

+$endfor$ +$for(creator)$ +

$creator.text$

+$endfor$ +$if(publisher)$ +

$publisher$

+$endif$ +$if(date)$ +

$date$

+$endif$ +$if(rights)$ +
$rights$
+$endif$ +
+$else$ +$if(coverpage)$ +
+ + + +
+$else$ +$for(include-before)$ +$include-before$ +$endfor$ +$body$ +$for(include-after)$ +$include-after$ +$endfor$ +$endif$ +$endif$ + + + diff --git a/templates/html.html b/templates/html.html new file mode 100644 index 0000000..0676215 --- /dev/null +++ b/templates/html.html @@ -0,0 +1,64 @@ + + + + + + +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(keywords)$ + +$endif$ + $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ + +$for(css)$ + +$endfor$ +$if(math)$ + $math$ +$endif$ + +$for(header-includes)$ + $header-includes$ +$endfor$ + + +$for(include-before)$ +$include-before$ +$endfor$ +$if(title)$ +
+

$title$

+$if(subtitle)$ +

$subtitle$

+$endif$ +$for(author)$ +

$author$

+$endfor$ +$if(date)$ +

$date$

+$endif$ +
+$endif$ +$if(toc)$ + +$endif$ +$body$ +$for(include-after)$ +$include-after$ +$endfor$ + + diff --git a/templates/pdf.latex b/templates/pdf.latex new file mode 100644 index 0000000..4ceca43 --- /dev/null +++ b/templates/pdf.latex @@ -0,0 +1,497 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +$if(dir)$ +$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$ +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(lang)$ + $babel-lang$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + hidelinks, +$endif$ + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% Avoid problems with \sout in headers with hyperref +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifxetex + % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\else + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\fi +$endif$ +$if(dir)$ +\ifxetex + % Load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newenvironment{cslreferences}% + {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}% + \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}% + {\par} +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} From a6969f3bd3521403dd310cc4a723bf5b4f7c878c Mon Sep 17 00:00:00 2001 From: Wikiti Date: Sat, 17 Oct 2020 23:02:50 +0100 Subject: [PATCH 2/2] Refactor code and document templates --- Makefile | 13 +- README.md | 26 ++++ style.css | 335 ------------------------------------------- templates/epub.html | 1 + templates/html.html | 1 + templates/style.css | 342 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 377 insertions(+), 341 deletions(-) delete mode 100644 style.css create mode 100644 templates/style.css diff --git a/Makefile b/Makefile index 2e20363..b84bd6e 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,9 @@ TEMPLATES = $(shell find templates/ -type f) COVER_IMAGE = images/cover.png MATH_FORMULAS = --webtex -# TODO: ?? -CSS_ARGS = --css $(CSS_FILE) +# Chapters content +CONTENT = awk 'FNR==1 && NR!=1 {print "\n\n"}{print}' $(CHAPTERS) +CONTENT_FILTERS = tee # Use this to add sed filters or other piped commands # Debugging @@ -74,21 +75,21 @@ docx: $(BUILD)/docx/$(OUTPUT_FILENAME).docx $(BUILD)/epub/$(OUTPUT_FILENAME).epub: $(EPUB_DEPENDENCIES) mkdir -p $(BUILD)/epub - $(PANDOC_COMMAND) $(ARGS) $(EPUB_ARGS) -o $@ $(CHAPTERS) + $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(EPUB_ARGS) -o $@ @echo "$@ was built" $(BUILD)/html/$(OUTPUT_FILENAME).html: $(HTML_DEPENDENCIES) mkdir -p $(BUILD)/html - $(PANDOC_COMMAND) $(ARGS) $(HTML_ARGS) -o $@ $(CHAPTERS) + $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(HTML_ARGS) -o $@ cp --parent $(IMAGES) $(BUILD)/html/ @echo "$@ was built" $(BUILD)/pdf/$(OUTPUT_FILENAME).pdf: $(PDF_DEPENDENCIES) mkdir -p $(BUILD)/pdf - $(PANDOC_COMMAND) $(ARGS) $(PDF_ARGS) -o $@ $(CHAPTERS) + $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(PDF_ARGS) -o $@ @echo "$@ was built" $(BUILD)/docx/$(OUTPUT_FILENAME).docx: $(DOCX_DEPENDENCIES) mkdir -p $(BUILD)/docx - $(PANDOC_COMMAND) $(ARGS) $(DOCX_ARGS) -o $@ $(CHAPTERS) + $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(DOCX_ARGS) -o $@ @echo "$@ was built" diff --git a/README.md b/README.md index 00c8243..0dae6cd 100644 --- a/README.md +++ b/README.md @@ -275,6 +275,25 @@ Table: This is an example table. {#tbl:table} Check the desired filter settings and usage for more information ([pandoc-crossref usage](http://lierdakil.github.io/pandoc-crossref/)). +#### Content filters + +If you need to modify the MD content before passing it to pandoc, you may use `CONTENT_FILTERS`. By +setting this makefile variable, it will be passed to the markdown content before passing it to +pandoc. For example, to replace all occurrences of `@pagebreak` with +`
` you may use a `sed` filter: + +``` +CONTENT_FILTERS = sed 's/@pagebreak/"
<\/div>"/g' +``` + +To use multiple filters, you may include multiple pipes on the `CONTENT_FILTERS` variable: + +``` +CONTENT_FILTERS = \ + sed 's/@pagebreak/"
<\/div>"/g' | \ + sed 's/@image/[Cool image](\/images\/image.png)/g' +``` + ### Output This template uses *Makefile* to automatize the building process. Instead of using the *pandoc cli @@ -332,6 +351,13 @@ If you want to configure the output, you'll probably have to look the [Pandoc Manual](http://pandoc.org/MANUAL.html) for further information about pdf (LaTeX) generation, custom styles, etc, and modify the Makefile file accordingly. +#### Templates + +Output files are generated using [pandoc templates](https://pandoc.org/MANUAL.html#templates). All +templates are located under the `templates/` folder, and may be modified as you will. Some basic +format templates are already included on this repository, ion case you need something to start +with. + ## References - [Pandoc](http://pandoc.org/) diff --git a/style.css b/style.css deleted file mode 100644 index d9ba1b0..0000000 --- a/style.css +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Custom CSS file. Override it as you like. - * - * Credits to @killercup (https://gist.github.com/killercup); Extracted from this Gist: - * https://gist.github.com/killercup/5917178 - */ - - h1 { - color: red !important; - } - - html { - font-size: 100%; - overflow-y: scroll; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - color: #444; - font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; - font-size: 12px; - line-height: 1.7; - padding: 1em; - margin: auto; - max-width: 42em; - background: #fefefe; -} - -a { - color: #0645ad; - text-decoration: none; -} - -a:visited { - color: #0b0080; -} - -a:hover { - color: #06e; -} - -a:active { - color: #faa700; -} - -a:focus { - outline: thin dotted; -} - -*::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -*::selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -a::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -a::selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -p { - margin: 1em 0; -} - -img { - max-width: 100%; -} - -h1, h2, h3, h4, h5, h6 { - color: #111; - line-height: 125%; - margin-top: 2em; - font-weight: normal; -} - -h4, h5, h6 { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1em; -} - -h6 { - font-size: 0.9em; -} - -blockquote { - color: #666666; - margin: 0; - padding-left: 3em; - border-left: 0.5em #EEE solid; -} - -hr { - display: block; - height: 2px; - border: 0; - border-top: 1px solid #aaa; - border-bottom: 1px solid #eee; - margin: 1em 0; - padding: 0; -} - -pre, code, kbd, samp { - color: #000; - font-family: monospace, monospace; - _font-family: 'courier new', monospace; - font-size: 0.98em; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -b, strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -ins { - background: #ff9; - color: #000; - text-decoration: none; -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -ul, ol { - margin: 1em 0; - padding: 0 0 0 2em; -} - -li p:last-child { - margin-bottom: 0; -} - -ul ul, ol ol { - margin: .3em 0; -} - -dl { - margin-bottom: 1em; -} - -dt { - font-weight: bold; - margin-bottom: .8em; -} - -dd { - margin: 0 0 .8em 2em; -} - -dd:last-child { - margin-bottom: 0; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} - -figure { - display: block; - text-align: center; - margin: 1em 0; -} - -figure img { - border: none; - margin: 0 auto; -} - -figcaption { - font-size: 0.8em; - font-style: italic; - margin: 0 0 .8em; -} - -table { - margin-bottom: 2em; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; - border-spacing: 0; - border-collapse: collapse; -} - -table th { - padding: .2em 1em; - background-color: #eee; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; -} - -table td { - padding: .2em 1em; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - vertical-align: top; -} - -.author { - font-size: 1.2em; - text-align: center; -} - -@media only screen and (min-width: 480px) { - body { - font-size: 14px; - } -} -@media only screen and (min-width: 768px) { - body { - font-size: 16px; - } -} -@media print { - * { - background: transparent !important; - color: black !important; - filter: none !important; - -ms-filter: none !important; - } - - body { - font-size: 12pt; - max-width: 100%; - } - - a, a:visited { - text-decoration: underline; - } - - hr { - height: 1px; - border: 0; - border-bottom: 1px solid black; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; - } - - pre, blockquote { - border: 1px solid #999; - padding-right: 1em; - page-break-inside: avoid; - } - - tr, img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page :left { - margin: 15mm 20mm 15mm 10mm; -} - - @page :right { - margin: 15mm 10mm 15mm 20mm; -} - - p, h2, h3 { - orphans: 3; - widows: 3; - } - - h2, h3 { - page-break-after: avoid; - } -} diff --git a/templates/epub.html b/templates/epub.html index 4f5bd66..c32f645 100644 --- a/templates/epub.html +++ b/templates/epub.html @@ -8,6 +8,7 @@ $if(highlighting-css)$ $endif$ $for(css)$ diff --git a/templates/html.html b/templates/html.html index 0676215..3cf0743 100644 --- a/templates/html.html +++ b/templates/html.html @@ -16,6 +16,7 @@ $endif$ $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ $for(css)$ diff --git a/templates/style.css b/templates/style.css new file mode 100644 index 0000000..5d098ef --- /dev/null +++ b/templates/style.css @@ -0,0 +1,342 @@ +/* + * Custom CSS file. Override it as you like. + * + * Credits to @killercup (https://gist.github.com/killercup); Extracted from this Gist: + * https://gist.github.com/killercup/5917178 + */ + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + color: #444; + font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; + font-size: 12px; + line-height: 1.7; + padding: 1em; + margin: auto; + max-width: 42em; + background: #fefefe; +} + +a { + color: #0645ad; + text-decoration: none; +} + +a:visited { + color: #0b0080; +} + +a:hover { + color: #06e; +} + +a:active { + color: #faa700; +} + +a:focus { + outline: thin dotted; +} + +*::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +*::selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +a::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +a::selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +p { + margin: 1em 0; +} + +img { + max-width: 100%; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: #111; + line-height: 125%; + margin-top: 2em; + font-weight: normal; +} + +h4, +h5, +h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1.2em; +} + +h5 { + font-size: 1em; +} + +h6 { + font-size: 0.9em; +} + +blockquote { + color: #666666; + margin: 0; + padding-left: 3em; + border-left: 0.5em #EEE solid; +} + +hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid #aaa; + border-bottom: 1px solid #eee; + margin: 1em 0; + padding: 0; +} + +pre, +code, +kbd, +samp { + color: #000; + font-family: monospace, monospace; + _font-family: 'courier new', monospace; + font-size: 0.98em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +ins { + background: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background: #ff0; + color: #000; + font-style: italic; + font-weight: bold; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +ul, +ol { + margin: 1em 0; + padding: 0 0 0 2em; +} + +li p:last-child { + margin-bottom: 0; +} + +ul ul, +ol ol { + margin: .3em 0; +} + +dl { + margin-bottom: 1em; +} + +dt { + font-weight: bold; + margin-bottom: .8em; +} + +dd { + margin: 0 0 .8em 2em; +} + +dd:last-child { + margin-bottom: 0; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; +} + +figure { + display: block; + text-align: center; + margin: 1em 0; +} + +figure img { + border: none; + margin: 0 auto; +} + +figcaption { + font-size: 0.8em; + font-style: italic; + margin: 0 0 .8em; +} + +table { + margin-bottom: 2em; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} + +table th { + padding: .2em 1em; + background-color: #eee; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} + +table td { + padding: .2em 1em; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + vertical-align: top; +} + +.author { + font-size: 1.2em; + text-align: center; +} + +@media only screen and (min-width: 480px) { + body { + font-size: 14px; + } +} + +@media only screen and (min-width: 768px) { + body { + font-size: 16px; + } +} + +@media print { + * { + background: transparent !important; + color: black !important; + filter: none !important; + -ms-filter: none !important; + } + body { + font-size: 12pt; + max-width: 100%; + } + a, + a:visited { + text-decoration: underline; + } + hr { + height: 1px; + border: 0; + border-bottom: 1px solid black; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + padding-right: 1em; + page-break-inside: avoid; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page :left { + margin: 15mm 20mm 15mm 10mm; + } + @page :right { + margin: 15mm 10mm 15mm 20mm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} \ No newline at end of file