From 8981c308e6b0fc00e06e9d0479f2cde3a8dce9b4 Mon Sep 17 00:00:00 2001 From: zeptodoctor <44736852+zeptodoctor@users.noreply.github.com> Date: Mon, 18 May 2020 14:41:26 +0000 Subject: [PATCH] build based on fe4e75c --- previews/PR334/chunk_options/index.html | 2 +- previews/PR334/examples/FIR_design.html | 5 +++++ previews/PR334/examples/FIR_design.jmd | 7 ++++++ previews/PR334/examples/FIR_design.md | 8 +++++-- previews/PR334/examples/FIR_design.txt | 8 +++++-- .../PR334/examples/figures/FIR_design_5_1.png | Bin 16253 -> 20112 bytes .../FIR_design_6_1.png} | Bin .../FIR_design_plots_4_1.png | Bin .../FIR_design_plots_5_1.png | Bin .../FIR_design_5_1.png} | Bin .../examples/jl_OnETJ9/FIR_design_6_1.png | Bin 0 -> 16253 bytes .../examples/jl_RWUaph/FIR_design_4_1.png | Bin 20112 -> 0 bytes previews/PR334/function_index/index.html | 2 +- previews/PR334/getting_started/index.html | 20 ++++-------------- previews/PR334/header/index.html | 2 +- previews/PR334/index.html | 2 +- previews/PR334/notebooks/index.html | 2 +- previews/PR334/publish/index.html | 6 +++--- previews/PR334/search/index.html | 2 +- previews/PR334/search_index.js | 2 +- previews/PR334/usage/index.html | 8 +++---- 21 files changed, 42 insertions(+), 34 deletions(-) rename previews/PR334/examples/{jl_RWUaph/FIR_design_5_1.png => figures/FIR_design_6_1.png} (100%) rename previews/PR334/examples/{jl_eLMfUf => jl_7S9BfT}/FIR_design_plots_4_1.png (100%) rename previews/PR334/examples/{jl_eLMfUf => jl_7S9BfT}/FIR_design_plots_5_1.png (100%) rename previews/PR334/examples/{figures/FIR_design_4_1.png => jl_OnETJ9/FIR_design_5_1.png} (100%) create mode 100644 previews/PR334/examples/jl_OnETJ9/FIR_design_6_1.png delete mode 100644 previews/PR334/examples/jl_RWUaph/FIR_design_4_1.png diff --git a/previews/PR334/chunk_options/index.html b/previews/PR334/chunk_options/index.html index f4e5eb1..d5d1a41 100644 --- a/previews/PR334/chunk_options/index.html +++ b/previews/PR334/chunk_options/index.html @@ -2,4 +2,4 @@ Chunk Options · Weave.jl

Chunk Options

I've mostly followed Knitr's naming for chunk options, but not all options are implemented.

Options are separated using ";" and need to be valid Julia expressions. Example: markdown code chunk that saves and displays a 12 cm wide image and hides the source code:

julia; out_width="12cm"; echo=false

Weave currently supports the following chunk options with the following defaults:

Options for Code

  • echo = true: Echo the code in the output document. If false the source code will be hidden.
  • results = "markup": The output format of the printed results. "markup" for literal block, "hidden" for hidden results, or anything else for raw output (I tend to use "tex" for Latex and "rst" for rest). Raw output is useful if you want to e.g. create tables from code chunks.
  • eval = true: Evaluate the code chunk. If false the chunk won’t be executed.
  • term = false: If true the output emulates a REPL session. Otherwise only stdout and figures will be included in output.
  • label = nothing: Chunk label, will be used for figure labels in Latex as fig:label.
  • wrap = true: Wrap long lines from output.
  • line_width = 75: Line width for wrapped lines.
  • cache = false: Cache results, depending on cache parameter on weave function.
  • hold = false: Hold all results until the end of the chunk.
  • tangle = true: Set tangle to false to exclude chunk from tangled code.

Options for Figures

  • fig_width = 6: Figure width passed to plotting library.
  • fig_height = 4: Figure height passed to plotting library.
  • out_width: Width of saved figure in output markup e.g. "50%", "12cm", 0.5\linewidth
  • out_height: Height of saved figure in output markup
  • dpi = 96: Resolution of saved figures.
  • fig_cap: Figure caption.
  • label: Chunk label, will be used for figure labels in Latex as fig:label
  • fig_ext: File extension (format) of saved figures.
  • fig_pos = "!h": Figure position in Latex, e.g.: "ht".
  • fig_env = "figure": Figure environment in Latex.

Set Default Chunk Options

You can set the default chunk options (and weave arguments) for a document using weave_options key in YAML Header Configuration. E.g. to set the default out_width of all figures you can use:

---
 weave_options:
   out_width : 50%
----

You can also set or change the default chunk options for a document either before weave using the set_chunk_defaults function.

Weave.set_chunk_defaults!Function
set_chunk_defaults!(opts::Dict{Symbol, Any})

Set default options for code chunks, use get_chunk_defaults to see the current values.

E.g.: set default dpi to 200 and fig_width to 8

julia> set_chunk_defaults!(Dict(:dpi => 200, :fig_width => 8))
source
+---

You can also set or change the default chunk options for a document either before weave using the set_chunk_defaults function.

Weave.set_chunk_defaults!Function
set_chunk_defaults!(opts::Dict{Symbol, Any})

Set default options for code chunks, use get_chunk_defaults to see the current values.

E.g.: set default dpi to 200 and fig_width to 8

julia> set_chunk_defaults!(Dict(:dpi => 200, :fig_width => 8))
source
Weave.get_chunk_defaultsFunction
get_chunk_defaults()

Get default options used for code chunks.

source
Weave.restore_chunk_defaults!Function
restore_chunk_defaults!()

Restore Weave.jl default chunk options.

source
diff --git a/previews/PR334/examples/FIR_design.html b/previews/PR334/examples/FIR_design.html index 270959e..2e6049f 100644 --- a/previews/PR334/examples/FIR_design.html +++ b/previews/PR334/examples/FIR_design.html @@ -661,6 +661,11 @@ div.title {text-align: center;}

Introduction

This an example of a julia script that can be published using Weave. The script can be executed normally using Julia or published to HTML or pdf with Weave. Text is written in markdown in lines starting with "#' " and code is executed and results are included in the published document.

Notice that you don't need to define chunk options, but you can using #+. just before code e.g. #+ term=True, caption='Fancy plots.'. If you're viewing the published version have a look at the source to see the markup.

+ + + + +

FIR Filter Design

We'll implement lowpass, highpass and ' bandpass FIR filters. If you want to read more about DSP I highly recommend The Scientist and Engineer's Guide to Digital Signal Processing which is freely available online.

Calculating frequency response

diff --git a/previews/PR334/examples/FIR_design.jmd b/previews/PR334/examples/FIR_design.jmd index 2266480..ddb1858 100644 --- a/previews/PR334/examples/FIR_design.jmd +++ b/previews/PR334/examples/FIR_design.jmd @@ -22,6 +22,13 @@ If you're viewing the published version have a look at the [source](FIR_design_plots.jl) to see the markup. + +```julia; echo = false; results = "hidden" +using Pkg +"Plots" ∉ keys(Pkg.project().dependencies) && Pkg.add("Plots") +"DSP" ∉ keys(Pkg.project().dependencies) && Pkg.add("DSP") +``` + # FIR Filter Design diff --git a/previews/PR334/examples/FIR_design.md b/previews/PR334/examples/FIR_design.md index 7212561..fc4da2c 100644 --- a/previews/PR334/examples/FIR_design.md +++ b/previews/PR334/examples/FIR_design.md @@ -18,6 +18,10 @@ If you're viewing the published version have a look at the [source](FIR_design_plots.jl) to see the markup. + + + + # FIR Filter Design @@ -151,7 +155,7 @@ plot(ws, h_db, ~~~~~~~~~~~~~ -![](figures/FIR_design_4_1.png)\ +![](figures/FIR_design_5_1.png)\ @@ -165,5 +169,5 @@ plot(ws, h_phase, ~~~~~~~~~~~~~ -![](figures/FIR_design_5_1.png)\ +![](figures/FIR_design_6_1.png)\ diff --git a/previews/PR334/examples/FIR_design.txt b/previews/PR334/examples/FIR_design.txt index 7212561..fc4da2c 100644 --- a/previews/PR334/examples/FIR_design.txt +++ b/previews/PR334/examples/FIR_design.txt @@ -18,6 +18,10 @@ If you're viewing the published version have a look at the [source](FIR_design_plots.jl) to see the markup. + + + + # FIR Filter Design @@ -151,7 +155,7 @@ plot(ws, h_db, ~~~~~~~~~~~~~ -![](figures/FIR_design_4_1.png)\ +![](figures/FIR_design_5_1.png)\ @@ -165,5 +169,5 @@ plot(ws, h_phase, ~~~~~~~~~~~~~ -![](figures/FIR_design_5_1.png)\ +![](figures/FIR_design_6_1.png)\ diff --git a/previews/PR334/examples/figures/FIR_design_5_1.png b/previews/PR334/examples/figures/FIR_design_5_1.png index 555d0672e911dc7577b6e435aa78fdc484997d84..ea76c3bfef838d8814da3d842016fa435ee0b741 100644 GIT binary patch literal 20112 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�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 literal 16253 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�yh@v6L*X?>caah_urR7%`6!z~=~mAr5?hqkpnCE(lRew4+(#jCDL zu9bK|a(Xl>)Y^=fCO`FRV?03xX?-hlHIzC|PD4|`)<%)cYD&4agk;I4-p0&Fkr7L> z_49?pm(3mHNsTb$r?v8MRiVb8EK{k8;oP$rr<5rAu=ix@4=6wYpGekI6!cwG%j+1K zPV$j?f+#=vugCX~WKEM0o^3{j!;ETKz(Bk47K~YL;_FW1ee_JzE1=WQ3mB3Niz`A?*q274o0c(Ohl>g?G=LOvu74^1g?h ziv3oR4!cpvh_8FyX4I!0>{m)kX0zaAi;f0z(r%7;$I=E6gh9c!AO?yn`z~Of#uz-j zSstzG1l*Jp85nf0f5WGDno~^UoxcjI4oM}zHn_D1O5QugD66NX+4uV~^DGTa!y)}y z<)((%X*$1`eBU3G;ByZDDy`G<{q8Zs?Uqk4+S%3og$FyGiv}zptdrgw1VZA#th&(U zWg&2cx=B@Y1Y6P~n1~Y*V$IX6O^AQJuCET~=dAft#~%-U4OOL^sV9QtEu9#MJEJUSXXypQ=b>=UCy`8DGdS)O^n1sYioDGo*}D z^JA9>?@Qz5Sz53}Au}cX`>Gw{n49+nTqAFsgT@k#%mw~^hMG12)2H9FPgtXZBuyd! zz6t9(rmvCg12!EuU3%a=O?3rB6kUxWs(E7SM|&DhRT}1vKyeFBbbLYievj{Bk-!}i z*0aDKWj4?WLW2K|*IZ;UV@=d%X;IE%YOc=ap^P}m<%OMtP&?7nMVbm;>3OHcFkV|l z3fwY4lq`BgsW%CxHG;_IxzK!w=`||$h!YxL{HXt1C2fy;2)J4gl@(3>vurU723166 zp(s#)j|5NWA;A4ylLR;-y+eW=0F>Gc>;LA0>31?~{wa~t5bBzpvWjyh1xoUcfPnTe zv{zj6!y}%35${apX+zAuIvY|8cWnd~x~lG(z1JW1OQx7@abwCJ4a~m^K3bLu%(}xf~!1m5=h7;MG3IT@# z1NUx^ggrK71Vl-xCrR4Zfgg&AsBCJ4et1E37>8Y*{nmMkOsz*r&AK>_Zu+Y(01Hia zpmwQv9Y?O@x+073diDQkm-?^RkDGD8F}OL#}5fAB_7`1a`$_4l^8? zy7FV(ep_)%ww|qY)uoxbnny>jhgC4%F7V|b1sgA1e&+7(;w=> z%$x0d&&Rwo^nvYkxNH{_j5Yr%LrZJG*7Ml_Af(up_7Cy8k3Eh%SO^x1WomSaKK+tw zu1k3m(5U!AS3`V}9@9e$fiHemAj&P4)p!AuoZrrIA+CmQzg-O>ec9LWc3jQqXgacR zVl%Gz$>Dl&u(~oqgLilU^L49&aNgE;8?_d8qVNz6eU1D4?tn`aW=cKAv?`Lt2P7nBxDgnsR&zgs zwt6?37_e@SSp{l5-jyK7n=uN;WTBq)IhyKIF>nH+gLd3K5h2i4-}C1*@N-piQnq&s znqe^pR{Qqwx@<-d7Y}kM69hCMV$(>W^CJobLT7#XT>v$}q~JnpKK^3(?8)xhfNhyD zA2RYk7|M3xSLK+vS(f0{T~H>ykm#JgJppZi0l&)e9C2?xsiskV4w;*z8I^zns)15d zYgrDJNNYiRxD(cP)#OYcgZ6j>wEj@C;a^sIVgsj`V<{-vhnbf=>Vvpo>cRdJs(=oE z*5DcbOIvP8CIJ2Ot7pYr5}P&Og64hj01D8@75AoGLy{U{IG`maPBKF#Y7i_+2$Z~l zJV(~W&66f~Xx6yAfC_xj?eGF77@up0F4EZ$Tr5T;4BAAsk$|!U<^2Br-sVl3iWCOO zb8z7jg-FXDd$co(N&1D`^o{4jO+bSXBq<0(K5~F=C!jL(pw#@~_A6B3tKvW(0caER zO`~QXrm;QX2#?$@mj0bZ17TNx@is%F+AiWkp6|UD$Gwv^_dvk{IwvWy-fRRCijOFs zu^y9#sSCgpt57-a@8WocV^F}C|4d7C&7a2C^OKB z^olN9!NLPwfij@tb3GGwxUSp085t`cnkYP)4?Z7XlGe6;37i$Jyg*xWk`^YhsNVz7 zMUqKWYbM|<>nj`4C5A^!bE2LujioGMv2HL_esJFJZ z9NI2FjcD39I5bY^$-K@P?-v+%V@FL|J<-(ANH{CRUBx?!6X5;3fQ0uiNJFwV1Mk&;@lx>jmW{B@T$t-VV$6?3|j?o*)BG^!!R6dZ4X^JOb#a`Fcgh;K$HjNBY{RJ zj^8o$AVx;_Jx?;&okhwyE0;j=u)pukS{ROsukRyJRs03$Oet=(0mUH@zD~jY4E2o5 zFrBHUZP2B`p|2N&r6Wjai->@*>Lm&U6jZ7KjM9?` z(iT^WAXx~ZN(~`ELJx4CIrp6V>7H}*Z8C2%Gw(d*ooAlkKQnsF`@jhNEe$$z30gLG zb{TzsW~dfhnc$Jq(m+Z7CymD%(2|61PgP0OcAQtmjk7{|S^OJR5()iy0H0o^B%wF z(#zJla~|N-mmBH}-P{Pl6 zi7yfTW*hhHr4tGY9VRNW(m(L6z+d$m>bd`TL6ECD*g7e4Sj`5woERXA-~zP^ZORN; z%jw2-w#681Vxd04>}?;0;L~B zUIa1{>Tbe?jSPgBMy1L_coIXI7}akeztwbKArk)cy(G9b>addBo^3!cqf$L(;ap(* zN)kmryQ(w>5i}{Ndyv&K#Fc<#_&>Ep)V)MzJdM|FBO)To+Z=~xf#-uKK2^kCmj@%a zpcx~b>$pE3D0>0;AL3Qr+U+?08mA<0=`>a5qY=0&x{XU zzswA>ww@pN+=fV~oZ9V6ET62V+)iKB8T6o*xn&$X*>;yD!yHJGzq+};ro0w z#dPliW2PgBd?HOi68kFROO%l#8Pu-YDzA-eI?;utpQKFhnYAL4E+(qV;-df6dQlG$ z!J?(aW9yz-`n9oGEbX2rqWcr@(4Sr&E<(GVKF(i#$Cii^d<`@o+Ktw+Yl=i*@^iBzX3Cn6VKDK#6@o_+)Mk6BYIbCFepbX% z??P6&@1PGZXl|%(vYA)Iqt65feOzfa-aO&eQw(R3;Zt3}se@b9S6QzVK2v58GMi+y zNo_Y$fG+y{Yq{`x5o8XIVDi3CEtf=Ycy;GrGdDK}%@*&{bz<8}QCFxSR4|{q(l)g5NabT7(HrFIHDqnC2=3Pxma@x@R-?j=bi;dk{ zQZN6c64qq)LumkHt$}dfX*zMf@t~S{diP>Cv}++$fvgj+?}KUDSj760`wP>!Dabi; zpp?LjBxyM410RN6^89EAZ95GK`&^BJ*0~i<_vRa$m@uh+`sB)_H|_8Uy9(1>#$ftAT zs8L*%RlkJ*7nVLpxQ9f{sO+!7NdaC|rTfL^@Gb)W*~_ zk;OejUkb%Vo4hDW&jk!OKR=&yxr7-G<|Y|ffHK??@=It-eMk@7V$0uUt|V}D-$6Pe z-vNp;#vrdi{hKCIz)^I3|7$0rF7x?#MWEqi|&6~ko7OTI1W-*Lx;W?O> zY@QNDejs=gSwJy zieY)+)b*J=WYtc_L?$019A%LI)Ly8)=cB4cW~EExu2GIAL+B6Ow=w{tHh zx0;Z4wE|{K0qcd@&5=4f_N7&e2i5)Et++Q#W*8YIf~XERbmET5)}6M4<9}Ru><&A%e}}B?%#F*l1Vr`}|Mv{Wt7!tON;vDTsz zdS6F}3BHpzcf6wiYj?MR%_A=N*!e0NhP`KT=`ei!ujh#7koR&3s(LKV4nZNGSm^(` z!c*E>X>LqB$f>3STx^?$ptA}-mCi7UwCkrzJy_*;K9e+&Fd>cBwQ_LyqL*zHv393| zeI{_S17-~>cdMXAgoEm&Q|NFU5{zJhf^gsU-B^-*Co*kgA>o8W6C(r!r`AWZE z{Z2I;n1)XOZ|8N<^o3RoEOAWn4|7`H+1uL-$1{8ff?0PM>ujEd{?x0%t<7b*Nz1dn zRRI(8%}QH!;z~#WY&w!h4o;sRheUyxN=-1gkV4r6WsT6$WF3!+A~8!X*;)>zCXDu} zDZ?04kG4t3^xvHzCnqOUJ=^IMS>f;4y&^3($_BmzwUkS4wr3u{MNoHO+oAFX_kW>; zxLD-9_*>MfklzlQS4KJOJjNDCOz7lv17=Nx2$vZ)T_BB{LtWU|4{rV%LjG--<|k^F zj-`a?IPNj$vL%AQAQfS?|SS8`%0Zb;Wf?b;*ZNQx;ZMKQN+TIgg7v<7l z)G_9NfwxZ|3U!F}C(^F!SX<{=kk^1g<;~Xc96_+>`=3vgh%3WzEA`f%^-?`cz^haJ_APPQLE?D3x=Lj+X2KktQI{*Lx diff --git a/previews/PR334/function_index/index.html b/previews/PR334/function_index/index.html index dff384f..119cfff 100644 --- a/previews/PR334/function_index/index.html +++ b/previews/PR334/function_index/index.html @@ -1,2 +1,2 @@ -Function index · Weave.jl +Function index · Weave.jl diff --git a/previews/PR334/getting_started/index.html b/previews/PR334/getting_started/index.html index 26dd87f..f1f4a3a 100644 --- a/previews/PR334/getting_started/index.html +++ b/previews/PR334/getting_started/index.html @@ -1,23 +1,11 @@ -Getting started · Weave.jl

Getting started

The best way to get started using Weave.jl is to look at the example input and output documents. Examples for different formats are included in the packages examples directory.

First have a look at source document using markdown code chunks and Plots.jl for figures: FIR_design.jmd and then see the output in different formats:

Note

Producing PDF output requires that you have XeLateX installed.

Add dependencies for the example if needed:

using Pkg; Pkg.add.(["Plots", "DSP"])

Weave the files to your working directory:

using Weave
+Getting started · Weave.jl

Getting started

The best way to get started using Weave.jl is to look at the example input and output documents. Examples for different formats are included in the packages examples directory.

First have a look at source document using markdown code chunks and Plots.jl for figures: FIR_design.jmd (its path is bound to Weave.SAMPLE_JMD_DOC) and then see the output in different formats:

Note

Producing PDF output requires that you have XeLateX installed.

Add dependencies for the example if needed:

using Pkg; Pkg.add.(["Plots", "DSP"])

Weave the files to your working directory:

using Weave
 
 # Julia markdown to HTML
-weave(
-  joinpath(dirname(pathof(Weave)), "../examples", "FIR_design.jmd");
-  doctype = "md2html",
-  out_path = :pwd
-)
+weave(Weave.SAMPLE_JMD_DOC; doctype = "md2html", out_path = :pwd)
 
 # Julia markdown to PDF
-weave(
-  joinpath(dirname(pathof(Weave)), "../examples", "FIR_design.jmd");
-  doctype = "md2pdf",
-  out_path = :pwd
-)
+weave(Weave.SAMPLE_JMD_DOC; doctype = "md2pdf", out_path = :pwd)
 
 # Julia markdown to Pandoc markdown
-weave(
-  joinpath(dirname(pathof(Weave)), "../examples", "FIR_design.jmd");
-  doctype = "pandoc",
-  out_path = :pwd
-)
+weave(Weave.SAMPLE_JMD_DOC; doctype = "pandoc", out_path = :pwd)
Tips

Weave.SAMPLE_JMD_DOC is the path of FIR_design.jmd.

diff --git a/previews/PR334/header/index.html b/previews/PR334/header/index.html index 1a35e15..55f7529 100644 --- a/previews/PR334/header/index.html +++ b/previews/PR334/header/index.html @@ -27,4 +27,4 @@ weave_options: md2pdf: out_path : pdf fig_ext : .png ---- +--- diff --git a/previews/PR334/index.html b/previews/PR334/index.html index e5cd81b..23f82ab 100644 --- a/previews/PR334/index.html +++ b/previews/PR334/index.html @@ -1,2 +1,2 @@ -Weave.jl - Scientific Reports Using Julia · Weave.jl
+Weave.jl - Scientific Reports Using Julia · Weave.jl
diff --git a/previews/PR334/notebooks/index.html b/previews/PR334/notebooks/index.html index 1114340..874bd9a 100644 --- a/previews/PR334/notebooks/index.html +++ b/previews/PR334/notebooks/index.html @@ -1,2 +1,2 @@ -Working with Jupyter notebooks · Weave.jl

Working with Jupyter notebooks

Weaving from Jupyter notebooks

Weave supports using Jupyter Notebooks as input format. This means you can weave notebooks to any supported formats; by default, it will be weaved to HTML.

weave("notebook.ipynb") # will be weaved to HTML
Warning

You can't use chunk options with notebooks.

Output to Jupyter notebooks

As of Weave 0.5.1. there is new notebook method to convert Weave documents to Jupyter notebooks using nbconvert.

Weave.notebookFunction
notebook(source::AbstractString; kwargs...)

Convert Weave document source to Jupyter Notebook and execute the code using nbconvert. Ignores all chunk options.

Keyword options

  • out_path::Union{Symbol,AbstractString} = :pwd: Path where the output is generated can be either of:
    • :doc: Path of the source document
    • :pwd: Julia working directory (default)
    • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
  • timeout = -1: nbconvert cell timeout in seconds. Defaults to -1 (no timeout)
  • nbconvert_options::AbstractString = "": String of additional options to pass to nbconvert, such as "--allow-errors"
  • jupyter_path::AbstractString = "jupyter": Path/command for the Jupyter you want to use. Defaults to "jupyter", which runs whatever is linked/alias to that
Warning

The code is not executed by Weave, but by nbconvert. This means that the output doesn't necessarily always work properly; see #116.

Note

In order to just convert Weave document to Jupyter Notebook, use convert_doc instead.

source

You can specify jupyter used to execute the notebook with the jupyter_path keyword argument (this defaults to the "jupyter", i.e. whatever you have linked to that location).

Instead, you might want to use the convert_doc method below and run the code in Jupyter.

Converting between formats

You can convert between all supported input formats using the convert_doc function.

To convert from script to notebook:

convert_doc("examples/FIR_design.jl", "FIR_design.ipynb")

and from notebook to Markdown use:

convert_doc("FIR_design.ipynb", "FIR_design.jmd")
Weave.convert_docFunction
convert_doc(infile::AbstractString, outfile::AbstractString; outformat::Union{Nothing,AbstractString} = nothing)

Convert Weave documents between different formats

  • infile: Path of the input document
  • outfile: Path of the output document
  • outformat = nothing: Output document format (optional). By default (i.e. given nothing) Weave will try to automatically detect it from the outfile's extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
source
+Working with Jupyter notebooks · Weave.jl

Working with Jupyter notebooks

Weaving from Jupyter notebooks

Weave supports using Jupyter Notebooks as input format. This means you can weave notebooks to any supported formats; by default, it will be weaved to HTML.

weave("notebook.ipynb") # will be weaved to HTML
Warning

You can't use chunk options with notebooks.

Output to Jupyter notebooks

As of Weave 0.5.1. there is new notebook method to convert Weave documents to Jupyter notebooks using nbconvert.

Weave.notebookFunction
notebook(source::AbstractString; kwargs...)

Convert Weave document source to Jupyter Notebook and execute the code using nbconvert. Ignores all chunk options.

Keyword options

  • out_path::Union{Symbol,AbstractString} = :pwd: Path where the output is generated can be either of:
    • :doc: Path of the source document
    • :pwd: Julia working directory (default)
    • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
  • timeout = -1: nbconvert cell timeout in seconds. Defaults to -1 (no timeout)
  • nbconvert_options::AbstractString = "": String of additional options to pass to nbconvert, such as "--allow-errors"
  • jupyter_path::AbstractString = "jupyter": Path/command for the Jupyter you want to use. Defaults to "jupyter", which runs whatever is linked/alias to that
Warning

The code is not executed by Weave, but by nbconvert. This means that the output doesn't necessarily always work properly; see #116.

Note

In order to just convert Weave document to Jupyter Notebook, use convert_doc instead.

source

You can specify jupyter used to execute the notebook with the jupyter_path keyword argument (this defaults to the "jupyter", i.e. whatever you have linked to that location).

Instead, you might want to use the convert_doc method below and run the code in Jupyter.

Converting between formats

You can convert between all supported input formats using the convert_doc function.

To convert from script to notebook:

convert_doc("examples/FIR_design.jl", "FIR_design.ipynb")

and from notebook to Markdown use:

convert_doc("FIR_design.ipynb", "FIR_design.jmd")
Weave.convert_docFunction
convert_doc(infile::AbstractString, outfile::AbstractString; outformat::Union{Nothing,AbstractString} = nothing)

Convert Weave documents between different formats

  • infile: Path of the input document
  • outfile: Path of the output document
  • outformat = nothing: Output document format (optional). By default (i.e. given nothing) Weave will try to automatically detect it from the outfile's extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
source
diff --git a/previews/PR334/publish/index.html b/previews/PR334/publish/index.html index 394aa4d..8294103 100644 --- a/previews/PR334/publish/index.html +++ b/previews/PR334/publish/index.html @@ -3,7 +3,7 @@ title : Weave example author : Matti Pastell date: 15th December 2016 ----

Here are sample input and outputs:

They are generated as follows:

weave(joinpath(dirname(pathof(Weave)), "../examples", "FIR_design_plots.jl")) # default to md2html output format
-weave(joinpath(dirname(pathof(Weave)), "../examples", "FIR_design_plots.jl"), doctype = "md2pdf")
Note

"md2html" and "md2pdf" assume Julia markdown format as an input, while pandoc2pdf and pandoc2html assume Noweb input format (i.e. Pandoc markdown).

Templates

You can use a custom template with md2html and md2pdf formats with template keyword option, e.g.: weave("FIR_design_plots.jl", template = "custom.tpl".

As starting point, you can use the existing templates:

Templates are rendered using Mustache.jl.

Supported Markdown syntax

The markdown variant used by Weave is Julia markdown. In addition Weave supports few additional Markdown features:

Comments

You can add comments using html syntax: <!-- -->

Multiline equations

You can add multiline equations using:

$$
+---

Here are sample input and outputs:

They are generated as follows:

weave(Weave.SAMPLE_JL_DOC)) # default to md2html output format
+weave(Weave.SAMPLE_JL_DOC; doctype = "md2pdf")
Tips

Weave.SAMPLE_JL_DOC is the path of FIR_design.jl.

Note

"md2html" and "md2pdf" assume Julia markdown format as an input, while pandoc2pdf and pandoc2html assume Noweb input format (i.e. Pandoc markdown).

Templates

You can use a custom template with md2html and md2pdf formats with template keyword option, e.g.: weave("FIR_design_plots.jl", template = "custom.tpl".

As starting point, you can use the existing templates:

Templates are rendered using Mustache.jl.

Supported Markdown syntax

The markdown variant used by Weave is Julia markdown. In addition Weave supports few additional Markdown features:

Comments

You can add comments using html syntax: <!-- -->

Multiline equations

You can add multiline equations using:

$$
 x^2 = x*x
-$$
+$$ diff --git a/previews/PR334/search/index.html b/previews/PR334/search/index.html index 04329f8..2c41022 100644 --- a/previews/PR334/search/index.html +++ b/previews/PR334/search/index.html @@ -1,2 +1,2 @@ -Search · Weave.jl

Loading search...

    +Search · Weave.jl

    Loading search...

      diff --git a/previews/PR334/search_index.js b/previews/PR334/search_index.js index 7762c22..cdeee1b 100644 --- a/previews/PR334/search_index.js +++ b/previews/PR334/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"chunk_options/#Chunk-Options-1","page":"Chunk Options","title":"Chunk Options","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"I've mostly followed Knitr's naming for chunk options, but not all options are implemented.","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"Options are separated using \";\" and need to be valid Julia expressions. Example: markdown code chunk that saves and displays a 12 cm wide image and hides the source code:","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"julia; out_width=\"12cm\"; echo=false","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"Weave currently supports the following chunk options with the following defaults:","category":"page"},{"location":"chunk_options/#Options-for-Code-1","page":"Chunk Options","title":"Options for Code","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"echo = true: Echo the code in the output document. If false the source code will be hidden.\nresults = \"markup\": The output format of the printed results. \"markup\" for literal block, \"hidden\" for hidden results, or anything else for raw output (I tend to use \"tex\" for Latex and \"rst\" for rest). Raw output is useful if you want to e.g. create tables from code chunks.\neval = true: Evaluate the code chunk. If false the chunk won’t be executed.\nterm = false: If true the output emulates a REPL session. Otherwise only stdout and figures will be included in output.\nlabel = nothing: Chunk label, will be used for figure labels in Latex as fig:label.\nwrap = true: Wrap long lines from output.\nline_width = 75: Line width for wrapped lines.\ncache = false: Cache results, depending on cache parameter on weave function.\nhold = false: Hold all results until the end of the chunk.\ntangle = true: Set tangle to false to exclude chunk from tangled code.","category":"page"},{"location":"chunk_options/#Options-for-Figures-1","page":"Chunk Options","title":"Options for Figures","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"fig_width = 6: Figure width passed to plotting library.\nfig_height = 4: Figure height passed to plotting library.\nout_width: Width of saved figure in output markup e.g. \"50%\", \"12cm\", 0.5\\linewidth\nout_height: Height of saved figure in output markup\ndpi = 96: Resolution of saved figures.\nfig_cap: Figure caption.\nlabel: Chunk label, will be used for figure labels in Latex as fig:label\nfig_ext: File extension (format) of saved figures.\nfig_pos = \"!h\": Figure position in Latex, e.g.: \"ht\".\nfig_env = \"figure\": Figure environment in Latex.","category":"page"},{"location":"chunk_options/#Set-Default-Chunk-Options-1","page":"Chunk Options","title":"Set Default Chunk Options","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"You can set the default chunk options (and weave arguments) for a document using weave_options key in YAML Header Configuration. E.g. to set the default out_width of all figures you can use:","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"---\nweave_options:\n out_width : 50%\n---","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"You can also set or change the default chunk options for a document either before weave using the set_chunk_defaults function.","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"set_chunk_defaults!\nget_chunk_defaults\nrestore_chunk_defaults!","category":"page"},{"location":"chunk_options/#Weave.set_chunk_defaults!","page":"Chunk Options","title":"Weave.set_chunk_defaults!","text":"set_chunk_defaults!(opts::Dict{Symbol, Any})\n\nSet default options for code chunks, use get_chunk_defaults to see the current values.\n\nE.g.: set default dpi to 200 and fig_width to 8\n\njulia> set_chunk_defaults!(Dict(:dpi => 200, :fig_width => 8))\n\n\n\n\n\n","category":"function"},{"location":"chunk_options/#Weave.get_chunk_defaults","page":"Chunk Options","title":"Weave.get_chunk_defaults","text":"get_chunk_defaults()\n\nGet default options used for code chunks.\n\n\n\n\n\n","category":"function"},{"location":"chunk_options/#Weave.restore_chunk_defaults!","page":"Chunk Options","title":"Weave.restore_chunk_defaults!","text":"restore_chunk_defaults!()\n\nRestore Weave.jl default chunk options.\n\n\n\n\n\n","category":"function"},{"location":"header/#Header-Configuration-1","page":"Header Configuration","title":"Header Configuration","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"When weaveing a markdown document, you use YAML header to provide additional metadata and configuration options. A YAML header should be in the beginning of the input document delimited with ---.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"warning: Warning\nYAML header configuration is only supported when weaveing markdown or Noweb syntax documents.","category":"page"},{"location":"header/#Document-Metadata-1","page":"Header Configuration","title":"Document Metadata","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"You can set additional document metadata in YAML header. When weaveing to Julia markdown documents to HTML or PDF, Weave respects the following metadata specification:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"title\nauthor\ndate","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"An example:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\ntitle : Header Example\nauthor : Shuhei Kadowaki\ndate: 16th May 2020\n---","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"note: Note\nYou can also have other metadata, but they won't appear in the resulting HTML and PDF. If you weave to Julia markdown to GitHub/Hugo markdown, all the metadata will be preserved.","category":"page"},{"location":"header/#Dynamic-Metadata-1","page":"Header Configuration","title":"Dynamic Metadata","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The metadata can be given \"dynamically\"; if you have inline code within YAML header, they will be evaluated after evaluating all the chunks and replaced with the results.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The example document below will set date metadata dynamically. Note that Date is available since the chunk is evaluated first.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":" ---\n title : Header Example\n author : Shuhei Kadowaki\n date: `j Date(now())`\n ---\n\n ```julia; echo = false\n using Datas\n ```","category":"page"},{"location":"header/#Configuration-Options-1","page":"Header Configuration","title":"Configuration Options","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"Each of keyword arguments of weave can be set in the YAML header under options field. You can also set Chunks Options there that will be applied globally.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The example below sets out_path and doctype options and overwrites term and wrap chunk options:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\ntitle : Header Example\nauthor : Shuhei Kadowaki\ndate: 16th May 2020\nweave_options:\n out_path: relative/path/to/this/document\n doctype: github\n term: true\n wrap: false\n---","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"note: Note\nconfigurations specified within the YAML header have higher precedence than those specified via weave keyword arguments\nchunk options specified within each chunk have higher precedence than the global global chunk options specified within the YAML header","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"warning: Warning\nAs opposed to metadata, most of those configuration options can't be given dynamically (i.e. can't be via inline code), since they are needed for evaluation of chunks themselves. But some configuration options that are needed \"formatting\" document can still be given dynamically:template\ncss\nhighlight_theme\npandoc_options\nlatex_cmd\nkeep_unicodeSee also: weave","category":"page"},{"location":"header/#Format-Specific-Options-1","page":"Header Configuration","title":"Format Specific Options","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The header configurations can be format specific. Here is how to set different out_path for md2html and md2pdf and set fig_ext globally:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\nweave_options:\n md2html:\n out_path : html\n md2pdf:\n out_path : pdf\n fig_ext : .png\n---","category":"page"},{"location":"publish/#Publishing-to-HTML-and-PDF-1","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can also publish any supported input format to HTML and PDF documents.","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"note: Note\nProducing PDF output requires that you have XeLaTex installed and in your path.","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can use a YAML header in the beginning of the input document delimited with --- to set the document title, author and date, e.g.:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"---\ntitle : Weave example\nauthor : Matti Pastell\ndate: 15th December 2016\n---","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"Here are sample input and outputs:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"input (Julia markdown format): FIR_design_plots.jl\nHTML output: FIR_design_plots.html\nPDF output: FIR_design_plots.pdf","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"They are generated as follows:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"weave(joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design_plots.jl\")) # default to md2html output format\nweave(joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design_plots.jl\"), doctype = \"md2pdf\")","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"note: Note\n\"md2html\" and \"md2pdf\" assume Julia markdown format as an input, while pandoc2pdf and pandoc2html assume Noweb input format (i.e. Pandoc markdown).","category":"page"},{"location":"publish/#Templates-1","page":"Publishing to HTML and PDF","title":"Templates","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can use a custom template with md2html and md2pdf formats with template keyword option, e.g.: weave(\"FIR_design_plots.jl\", template = \"custom.tpl\".","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"As starting point, you can use the existing templates:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"HTML (md2html): julia_html.tpl\nLaTex (md2pdf): julia_tex.tpl","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"Templates are rendered using Mustache.jl.","category":"page"},{"location":"publish/#Supported-Markdown-syntax-1","page":"Publishing to HTML and PDF","title":"Supported Markdown syntax","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"The markdown variant used by Weave is Julia markdown. In addition Weave supports few additional Markdown features:","category":"page"},{"location":"publish/#Comments-1","page":"Publishing to HTML and PDF","title":"Comments","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can add comments using html syntax: ","category":"page"},{"location":"publish/#Multiline-equations-1","page":"Publishing to HTML and PDF","title":"Multiline equations","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can add multiline equations using:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"$$\nx^2 = x*x\n$$","category":"page"},{"location":"usage/#Using-Weave-1","page":"Using Weave","title":"Using Weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can write your documentation and code in input document using Markdown, Noweb or script syntax and use weave function to execute to document to capture results and figures.","category":"page"},{"location":"usage/#weave-1","page":"Using Weave","title":"weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave document with markup and julia code using Plots.jl for plots, out_path = :pwd makes the results appear in the current working directory.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"A prepared example","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"# First add depencies for the example\nusing Pkg; Pkg.add.([\"Plots\", \"DSP\"])\nusing Weave\nweave(joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design.jmd\"), out_path=:pwd)","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"weave","category":"page"},{"location":"usage/#Weave.weave","page":"Using Weave","title":"Weave.weave","text":"weave(source::AbstractString; kwargs...)\n\nWeave an input document to output file.\n\nKeyword options\n\ndoctype::Union{Nothing,AbstractString} = nothing: Output document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also manually specify it; see list_out_formats() for the supported formats\ninformat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\nout_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:\n:doc: Path of the source document (default)\n:pwd: Julia working directory\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\nargs::Dict = Dict(): Arguments to be passed to the weaved document; will be available as WEAVE_ARGS in the document\nmod::Union{Module,Nothing} = nothing: Module where Weave evals code. You can pass a Module object, otherwise create an new sandbox module.\nfig_path::AbstractString = \"figures\": Where figures will be generated, relative to out_path\nfig_ext::Union{Nothing,AbstractString} = nothing: Extension for saved figures e.g. \".pdf\", \".png\". Default setting depends on doctype\ncache_path::AbstractString = \"cache\": Where of cached output will be saved\ncache::Symbol = :off: Controls caching of code:\n:off means no caching (default)\n:all caches everything\n:user caches based on chunk options\n:refresh runs all code chunks and save new cache\nthrow_errors::Bool = false: If false errors are included in output document and the whole document is executed. If true errors are thrown when they occur\ntemplate::Union{Nothing,AbstractString,Mustache.MustacheTokens} = nothing: Template (file path) or Mustache.MustacheTokenss for md2html or md2tex formats\ncss::Union{Nothing,AbstractString} = nothing: Path of a CSS file used for md2html format\nhighlight_theme::Union{Nothing,Type{<:Highlights.AbstractTheme}} = nothing: Theme used for syntax highlighting (defaults to Highlights.Themes.DefaultTheme)\npandoc_options::Vector{<:AbstractString} = String[]: Strings of options to pass to pandoc for pandoc2html and pandoc2pdf formats, e.g. [\"--toc\", \"-N\"]\nlatex_cmd::AbstractString = \"xelatex\": The command used to make PDF file from .tex\nkeep_unicode::Bool = false: If true, do not convert unicode characters to their respective latex representation. This is especially useful if a font and tex-engine with support for unicode characters are used\n\nnote: Note\nRun Weave from terminal and try to avoid weaving from IJulia or ESS; they tend to mess with capturing output.\n\n\n\n\n\n","category":"function"},{"location":"usage/#tangle-1","page":"Using Weave","title":"tangle","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Tangling extracts the code from document:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"tangle","category":"page"},{"location":"usage/#Weave.tangle","page":"Using Weave","title":"Weave.tangle","text":"tangle(source::AbstractString; kwargs...)\n\nTangle source code from input document to .jl file.\n\nKeyword options\n\ninformat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\nout_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:\n:doc: Path of the source document (default)\n:pwd: Julia working directory\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\n\n\n\n\n\n","category":"function"},{"location":"usage/#Supported-Output-Formats-1","page":"Using Weave","title":"Supported Output Formats","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave automatically detects the output format based on the file extension. The auto output format detection is handled by detect_doctype(path::AbstractString):","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"function detect_doctype(path::AbstractString)\n _, ext = lowercase.(splitext(path))\n\n match(r\"^\\.(jl|.?md|ipynb)\", ext) !== nothing && return \"md2html\"\n ext == \".rst\" && return \"rst\"\n ext == \".tex\" && return \"texminted\"\n ext == \".txt\" && return \"asciidoc\"\n\n return \"pandoc\"\nend","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can also manually specify it using the doctype keyword option. You can get a list of supported output formats:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"list_out_formats","category":"page"},{"location":"usage/#Weave.list_out_formats","page":"Using Weave","title":"Weave.list_out_formats","text":"list_out_formats()\n\nList supported output formats\n\n\n\n\n\n","category":"function"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"using Weave # hide\nlist_out_formats()","category":"page"},{"location":"usage/#document-syntax-1","page":"Using Weave","title":"Document Syntax","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave uses markdown, Noweb or script syntax for defining the code chunks and documentation chunks. You can also weave Jupyter notebooks. The format is detected based on the file extension, but you can also set it manually using the informat parameter.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"The rules for autodetection are:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"ext == \".jl\" && return \"script\"\next == \".jmd\" && return \"markdown\"\next == \".ipynb\" && return \"notebook\"\nreturn \"noweb\"","category":"page"},{"location":"usage/#Documentation-Chunks-1","page":"Using Weave","title":"Documentation Chunks","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"In markdown and Noweb input formats documentation chunks are the parts that aren't inside code delimiters. Documentation chunks can be written with several different markup languages.","category":"page"},{"location":"usage/#Code-Chunks-1","page":"Using Weave","title":"Code Chunks","text":"","category":"section"},{"location":"usage/#Markdown-Format-1","page":"Using Weave","title":"Markdown Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Markdown code chunks are defined using fenced code blocks with options following on the same line. e.g. to hide code from output you can use:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":" ```julia; echo=false","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Sample document","category":"page"},{"location":"usage/#inline-code-1","page":"Using Weave","title":"Inline Code","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can also add inline code to your documents using","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"`j juliacode`","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"or","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"! juliacode","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"syntax. Using the j code syntax you can insert code anywhere in a line and with the ! syntax the whole line after ! will be executed. The code will be replaced with captured output in the weaved document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"If the code produces figures the filename or base64 encoded string will be added to output e.g. to include a Plots figure in markdown you can use:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"![A plot](`j plot(1:10)`)","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"or to produce any html output:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"! display(\"text/html\", \"Header from julia\");","category":"page"},{"location":"usage/#Noweb-Format-1","page":"Using Weave","title":"Noweb Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Code chunks start with a line marked with <<>>= or <>= and end with line marked with @. The code between the start and end markers is executed and the output is captured to the output document. See chunk options.","category":"page"},{"location":"usage/#Script-Format-1","page":"Using Weave","title":"Script Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave also support script input format with a markup in comments. These scripts can be executed normally using Julia or published with Weave.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Lines starting with #', #%% or # %% are treated as document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"All non-document lines are treated as code. You can set chunk options using lines starting with #+ just before code e.g:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"#+ term=true\nhoge # some code comes here","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"The format is identical to Pweave and the concept is similar to publishing documents with MATLAB or using Knitr's spin. Weave will remove the first empty space from each line of documentation.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"See sample document:","category":"page"},{"location":"usage/#Configuration-via-YAML-Header-1","page":"Using Weave","title":"Configuration via YAML Header","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"When weaveing markdown files, you can use YAML header to provide additional metadata and configuration options. See Header Configuration section for more details.","category":"page"},{"location":"usage/#Passing-Runtime-Arguments-to-Documents-1","page":"Using Weave","title":"Passing Runtime Arguments to Documents","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can pass arguments as Dict to the weaved document using the args argument to weave. The arguments will be available as WEAVE_ARGS variable in the document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"This makes it possible to create the same report easily for e.g. different date ranges of input data from a database or from files with similar format giving the filename as input.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"In order to pass a filename to a document you need call weave using:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"weave(\"mydoc.jmd\", args = Dict(\"filename\" => \"somedata.h5\"))","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"and you can access the filename from document as follows:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":" ```julia\n print(WEAVE_ARGS[\"filename\"])\n ```","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can use the out_path argument to control the name of the output document.","category":"page"},{"location":"usage/#include_weave-1","page":"Using Weave","title":"include_weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can call include_weave on a Weave document and run all code chunks within in the current session.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"include_weave","category":"page"},{"location":"usage/#Weave.include_weave","page":"Using Weave","title":"Weave.include_weave","text":"include_weave(source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)\ninclude_weave(m::Module, source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)\n\nInclude code from Weave document calling include_string on all code from doc. Code is run in the path of the include document.\n\n\n\n\n\n","category":"function"},{"location":"getting_started/#Getting-started-1","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"The best way to get started using Weave.jl is to look at the example input and output documents. Examples for different formats are included in the packages examples directory.","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"First have a look at source document using markdown code chunks and Plots.jl for figures: FIR_design.jmd and then see the output in different formats:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"HTML: FIR_design.html\nPDF: FIR_design.pdf\nPandoc markdown: FIR_design.txt","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"note: Note\nProducing PDF output requires that you have XeLateX installed.","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"Add dependencies for the example if needed:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"using Pkg; Pkg.add.([\"Plots\", \"DSP\"])","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"Weave the files to your working directory:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"using Weave\n\n# Julia markdown to HTML\nweave(\n joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design.jmd\");\n doctype = \"md2html\",\n out_path = :pwd\n)\n\n# Julia markdown to PDF\nweave(\n joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design.jmd\");\n doctype = \"md2pdf\",\n out_path = :pwd\n)\n\n# Julia markdown to Pandoc markdown\nweave(\n joinpath(dirname(pathof(Weave)), \"../examples\", \"FIR_design.jmd\");\n doctype = \"pandoc\",\n out_path = :pwd\n)","category":"page"},{"location":"notebooks/#Working-with-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#Weaving-from-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Weaving from Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"Weave supports using Jupyter Notebooks as input format. This means you can weave notebooks to any supported formats; by default, it will be weaved to HTML.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"weave(\"notebook.ipynb\") # will be weaved to HTML","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"warning: Warning\nYou can't use chunk options with notebooks.","category":"page"},{"location":"notebooks/#Output-to-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Output to Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"As of Weave 0.5.1. there is new notebook method to convert Weave documents to Jupyter notebooks using nbconvert.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"notebook","category":"page"},{"location":"notebooks/#Weave.notebook","page":"Working with Jupyter notebooks","title":"Weave.notebook","text":"notebook(source::AbstractString; kwargs...)\n\nConvert Weave document source to Jupyter Notebook and execute the code using nbconvert. Ignores all chunk options.\n\nKeyword options\n\nout_path::Union{Symbol,AbstractString} = :pwd: Path where the output is generated can be either of:\n:doc: Path of the source document\n:pwd: Julia working directory (default)\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\ntimeout = -1: nbconvert cell timeout in seconds. Defaults to -1 (no timeout)\nnbconvert_options::AbstractString = \"\": String of additional options to pass to nbconvert, such as \"--allow-errors\"\njupyter_path::AbstractString = \"jupyter\": Path/command for the Jupyter you want to use. Defaults to \"jupyter\", which runs whatever is linked/alias to that\n\nwarning: Warning\nThe code is not executed by Weave, but by nbconvert. This means that the output doesn't necessarily always work properly; see #116.\n\nnote: Note\nIn order to just convert Weave document to Jupyter Notebook, use convert_doc instead.\n\n\n\n\n\n","category":"function"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"You can specify jupyter used to execute the notebook with the jupyter_path keyword argument (this defaults to the \"jupyter\", i.e. whatever you have linked to that location).","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"Instead, you might want to use the convert_doc method below and run the code in Jupyter.","category":"page"},{"location":"notebooks/#Converting-between-formats-1","page":"Working with Jupyter notebooks","title":"Converting between formats","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"You can convert between all supported input formats using the convert_doc function.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"To convert from script to notebook:","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc(\"examples/FIR_design.jl\", \"FIR_design.ipynb\")","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"and from notebook to Markdown use:","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc(\"FIR_design.ipynb\", \"FIR_design.jmd\")","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc","category":"page"},{"location":"notebooks/#Weave.convert_doc","page":"Working with Jupyter notebooks","title":"Weave.convert_doc","text":"convert_doc(infile::AbstractString, outfile::AbstractString; outformat::Union{Nothing,AbstractString} = nothing)\n\nConvert Weave documents between different formats\n\ninfile: Path of the input document\noutfile: Path of the output document\noutformat = nothing: Output document format (optional). By default (i.e. given nothing) Weave will try to automatically detect it from the outfile's extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\n\n\n\n\n\n","category":"function"},{"location":"function_index/#Function-index-1","page":"Function index","title":"Function index","text":"","category":"section"},{"location":"function_index/#","page":"Function index","title":"Function index","text":"","category":"page"},{"location":"#Weave.jl-Scientific-Reports-Using-Julia-1","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"","category":"section"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"This is the documentation of Weave.jl. Weave is a scientific report generator/literate programming tool for Julia. It resembles Pweave, knitr, R Markdown, and Sweave.","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Current features","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Publish markdown directly to HTML and PDF using Julia or Pandoc\nExecute code as in terminal or in a unit of code chunk\nCapture Plots.jl or Gadfly.jl figures\nSupports various input format: Markdown, Noweb, Jupyter Notebook, and ordinal Julia script\nConversions between those input formats\nSupports various output document formats: HTML, PDF, GitHub markdown, Jupyter Notebook, MultiMarkdown, Asciidoc and reStructuredText\nSimple caching of results","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"(Image: Weave in Juno demo)","category":"page"},{"location":"#Index-1","page":"Weave.jl - Scientific Reports Using Julia","title":"Index","text":"","category":"section"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Pages = [\n \"index.md\",\n \"getting_started.md\",\n \"usage.md\",\n \"publish.md\",\n \"header.md\",\n \"chunk_options.md\",\n \"notebooks.md\",\n \"function_index.md\",\n]","category":"page"}] +[{"location":"chunk_options/#Chunk-Options-1","page":"Chunk Options","title":"Chunk Options","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"I've mostly followed Knitr's naming for chunk options, but not all options are implemented.","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"Options are separated using \";\" and need to be valid Julia expressions. Example: markdown code chunk that saves and displays a 12 cm wide image and hides the source code:","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"julia; out_width=\"12cm\"; echo=false","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"Weave currently supports the following chunk options with the following defaults:","category":"page"},{"location":"chunk_options/#Options-for-Code-1","page":"Chunk Options","title":"Options for Code","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"echo = true: Echo the code in the output document. If false the source code will be hidden.\nresults = \"markup\": The output format of the printed results. \"markup\" for literal block, \"hidden\" for hidden results, or anything else for raw output (I tend to use \"tex\" for Latex and \"rst\" for rest). Raw output is useful if you want to e.g. create tables from code chunks.\neval = true: Evaluate the code chunk. If false the chunk won’t be executed.\nterm = false: If true the output emulates a REPL session. Otherwise only stdout and figures will be included in output.\nlabel = nothing: Chunk label, will be used for figure labels in Latex as fig:label.\nwrap = true: Wrap long lines from output.\nline_width = 75: Line width for wrapped lines.\ncache = false: Cache results, depending on cache parameter on weave function.\nhold = false: Hold all results until the end of the chunk.\ntangle = true: Set tangle to false to exclude chunk from tangled code.","category":"page"},{"location":"chunk_options/#Options-for-Figures-1","page":"Chunk Options","title":"Options for Figures","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"fig_width = 6: Figure width passed to plotting library.\nfig_height = 4: Figure height passed to plotting library.\nout_width: Width of saved figure in output markup e.g. \"50%\", \"12cm\", 0.5\\linewidth\nout_height: Height of saved figure in output markup\ndpi = 96: Resolution of saved figures.\nfig_cap: Figure caption.\nlabel: Chunk label, will be used for figure labels in Latex as fig:label\nfig_ext: File extension (format) of saved figures.\nfig_pos = \"!h\": Figure position in Latex, e.g.: \"ht\".\nfig_env = \"figure\": Figure environment in Latex.","category":"page"},{"location":"chunk_options/#Set-Default-Chunk-Options-1","page":"Chunk Options","title":"Set Default Chunk Options","text":"","category":"section"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"You can set the default chunk options (and weave arguments) for a document using weave_options key in YAML Header Configuration. E.g. to set the default out_width of all figures you can use:","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"---\nweave_options:\n out_width : 50%\n---","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"You can also set or change the default chunk options for a document either before weave using the set_chunk_defaults function.","category":"page"},{"location":"chunk_options/#","page":"Chunk Options","title":"Chunk Options","text":"set_chunk_defaults!\nget_chunk_defaults\nrestore_chunk_defaults!","category":"page"},{"location":"chunk_options/#Weave.set_chunk_defaults!","page":"Chunk Options","title":"Weave.set_chunk_defaults!","text":"set_chunk_defaults!(opts::Dict{Symbol, Any})\n\nSet default options for code chunks, use get_chunk_defaults to see the current values.\n\nE.g.: set default dpi to 200 and fig_width to 8\n\njulia> set_chunk_defaults!(Dict(:dpi => 200, :fig_width => 8))\n\n\n\n\n\n","category":"function"},{"location":"chunk_options/#Weave.get_chunk_defaults","page":"Chunk Options","title":"Weave.get_chunk_defaults","text":"get_chunk_defaults()\n\nGet default options used for code chunks.\n\n\n\n\n\n","category":"function"},{"location":"chunk_options/#Weave.restore_chunk_defaults!","page":"Chunk Options","title":"Weave.restore_chunk_defaults!","text":"restore_chunk_defaults!()\n\nRestore Weave.jl default chunk options.\n\n\n\n\n\n","category":"function"},{"location":"header/#Header-Configuration-1","page":"Header Configuration","title":"Header Configuration","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"When weaveing a markdown document, you use YAML header to provide additional metadata and configuration options. A YAML header should be in the beginning of the input document delimited with ---.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"warning: Warning\nYAML header configuration is only supported when weaveing markdown or Noweb syntax documents.","category":"page"},{"location":"header/#Document-Metadata-1","page":"Header Configuration","title":"Document Metadata","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"You can set additional document metadata in YAML header. When weaveing to Julia markdown documents to HTML or PDF, Weave respects the following metadata specification:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"title\nauthor\ndate","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"An example:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\ntitle : Header Example\nauthor : Shuhei Kadowaki\ndate: 16th May 2020\n---","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"note: Note\nYou can also have other metadata, but they won't appear in the resulting HTML and PDF. If you weave to Julia markdown to GitHub/Hugo markdown, all the metadata will be preserved.","category":"page"},{"location":"header/#Dynamic-Metadata-1","page":"Header Configuration","title":"Dynamic Metadata","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The metadata can be given \"dynamically\"; if you have inline code within YAML header, they will be evaluated after evaluating all the chunks and replaced with the results.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The example document below will set date metadata dynamically. Note that Date is available since the chunk is evaluated first.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":" ---\n title : Header Example\n author : Shuhei Kadowaki\n date: `j Date(now())`\n ---\n\n ```julia; echo = false\n using Datas\n ```","category":"page"},{"location":"header/#Configuration-Options-1","page":"Header Configuration","title":"Configuration Options","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"Each of keyword arguments of weave can be set in the YAML header under options field. You can also set Chunks Options there that will be applied globally.","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The example below sets out_path and doctype options and overwrites term and wrap chunk options:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\ntitle : Header Example\nauthor : Shuhei Kadowaki\ndate: 16th May 2020\nweave_options:\n out_path: relative/path/to/this/document\n doctype: github\n term: true\n wrap: false\n---","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"note: Note\nconfigurations specified within the YAML header have higher precedence than those specified via weave keyword arguments\nchunk options specified within each chunk have higher precedence than the global global chunk options specified within the YAML header","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"warning: Warning\nAs opposed to metadata, most of those configuration options can't be given dynamically (i.e. can't be via inline code), since they are needed for evaluation of chunks themselves. But some configuration options that are needed \"formatting\" document can still be given dynamically:template\ncss\nhighlight_theme\npandoc_options\nlatex_cmd\nkeep_unicodeSee also: weave","category":"page"},{"location":"header/#Format-Specific-Options-1","page":"Header Configuration","title":"Format Specific Options","text":"","category":"section"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"The header configurations can be format specific. Here is how to set different out_path for md2html and md2pdf and set fig_ext globally:","category":"page"},{"location":"header/#","page":"Header Configuration","title":"Header Configuration","text":"---\nweave_options:\n md2html:\n out_path : html\n md2pdf:\n out_path : pdf\n fig_ext : .png\n---","category":"page"},{"location":"publish/#Publishing-to-HTML-and-PDF-1","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can also publish any supported input format to HTML and PDF documents.","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"note: Note\nProducing PDF output requires that you have XeLaTex installed and in your path.","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can use a YAML header in the beginning of the input document delimited with --- to set the document title, author and date, e.g.:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"---\ntitle : Weave example\nauthor : Matti Pastell\ndate: 15th December 2016\n---","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"Here are sample input and outputs:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"input (Julia markdown format): FIR_design_plots.jl (its path is bound to Weave.SAMPLE_JL_DOC)\nHTML output: FIR_design_plots.html\nPDF output: FIR_design_plots.pdf","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"They are generated as follows:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"weave(Weave.SAMPLE_JL_DOC)) # default to md2html output format\nweave(Weave.SAMPLE_JL_DOC; doctype = \"md2pdf\")","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"tips: Tips\nWeave.SAMPLE_JL_DOC is the path of FIR_design.jl.","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"note: Note\n\"md2html\" and \"md2pdf\" assume Julia markdown format as an input, while pandoc2pdf and pandoc2html assume Noweb input format (i.e. Pandoc markdown).","category":"page"},{"location":"publish/#Templates-1","page":"Publishing to HTML and PDF","title":"Templates","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can use a custom template with md2html and md2pdf formats with template keyword option, e.g.: weave(\"FIR_design_plots.jl\", template = \"custom.tpl\".","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"As starting point, you can use the existing templates:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"HTML (md2html): julia_html.tpl\nLaTex (md2pdf): julia_tex.tpl","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"Templates are rendered using Mustache.jl.","category":"page"},{"location":"publish/#Supported-Markdown-syntax-1","page":"Publishing to HTML and PDF","title":"Supported Markdown syntax","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"The markdown variant used by Weave is Julia markdown. In addition Weave supports few additional Markdown features:","category":"page"},{"location":"publish/#Comments-1","page":"Publishing to HTML and PDF","title":"Comments","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can add comments using html syntax: ","category":"page"},{"location":"publish/#Multiline-equations-1","page":"Publishing to HTML and PDF","title":"Multiline equations","text":"","category":"section"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"You can add multiline equations using:","category":"page"},{"location":"publish/#","page":"Publishing to HTML and PDF","title":"Publishing to HTML and PDF","text":"$$\nx^2 = x*x\n$$","category":"page"},{"location":"usage/#Using-Weave-1","page":"Using Weave","title":"Using Weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can write your documentation and code in input document using Markdown, Noweb or script syntax and use weave function to execute to document to capture results and figures.","category":"page"},{"location":"usage/#weave-1","page":"Using Weave","title":"weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave document with markup and julia code using Plots.jl for plots, out_path = :pwd makes the results appear in the current working directory.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"A prepared example: Weave.SAMPLE_JL_DOC","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"# First add depencies for the example\nusing Pkg; Pkg.add.([\"Plots\", \"DSP\"])\nusing Weave\nweave(Weave.SAMPLE_JL_DOC; out_path=:pwd)","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"weave","category":"page"},{"location":"usage/#Weave.weave","page":"Using Weave","title":"Weave.weave","text":"weave(source::AbstractString; kwargs...)\n\nWeave an input document to output file.\n\nKeyword options\n\ndoctype::Union{Nothing,AbstractString} = nothing: Output document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also manually specify it; see list_out_formats() for the supported formats\ninformat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\nout_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:\n:doc: Path of the source document (default)\n:pwd: Julia working directory\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\nargs::Dict = Dict(): Arguments to be passed to the weaved document; will be available as WEAVE_ARGS in the document\nmod::Union{Module,Nothing} = nothing: Module where Weave evals code. You can pass a Module object, otherwise create an new sandbox module.\nfig_path::AbstractString = \"figures\": Where figures will be generated, relative to out_path\nfig_ext::Union{Nothing,AbstractString} = nothing: Extension for saved figures e.g. \".pdf\", \".png\". Default setting depends on doctype\ncache_path::AbstractString = \"cache\": Where of cached output will be saved\ncache::Symbol = :off: Controls caching of code:\n:off means no caching (default)\n:all caches everything\n:user caches based on chunk options\n:refresh runs all code chunks and save new cache\nthrow_errors::Bool = false: If false errors are included in output document and the whole document is executed. If true errors are thrown when they occur\ntemplate::Union{Nothing,AbstractString,Mustache.MustacheTokens} = nothing: Template (file path) or Mustache.MustacheTokenss for md2html or md2tex formats\ncss::Union{Nothing,AbstractString} = nothing: Path of a CSS file used for md2html format\nhighlight_theme::Union{Nothing,Type{<:Highlights.AbstractTheme}} = nothing: Theme used for syntax highlighting (defaults to Highlights.Themes.DefaultTheme)\npandoc_options::Vector{<:AbstractString} = String[]: Strings of options to pass to pandoc for pandoc2html and pandoc2pdf formats, e.g. [\"--toc\", \"-N\"]\nlatex_cmd::AbstractString = \"xelatex\": The command used to make PDF file from .tex\nkeep_unicode::Bool = false: If true, do not convert unicode characters to their respective latex representation. This is especially useful if a font and tex-engine with support for unicode characters are used\n\nnote: Note\nRun Weave from terminal and try to avoid weaving from IJulia or ESS; they tend to mess with capturing output.\n\n\n\n\n\n","category":"function"},{"location":"usage/#tangle-1","page":"Using Weave","title":"tangle","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Tangling extracts the code from document:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"tangle","category":"page"},{"location":"usage/#Weave.tangle","page":"Using Weave","title":"Weave.tangle","text":"tangle(source::AbstractString; kwargs...)\n\nTangle source code from input document to .jl file.\n\nKeyword options\n\ninformat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\nout_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:\n:doc: Path of the source document (default)\n:pwd: Julia working directory\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\n\n\n\n\n\n","category":"function"},{"location":"usage/#Supported-Output-Formats-1","page":"Using Weave","title":"Supported Output Formats","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave automatically detects the output format based on the file extension. The auto output format detection is handled by detect_doctype(path::AbstractString):","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"function detect_doctype(path::AbstractString)\n _, ext = lowercase.(splitext(path))\n\n match(r\"^\\.(jl|.?md|ipynb)\", ext) !== nothing && return \"md2html\"\n ext == \".rst\" && return \"rst\"\n ext == \".tex\" && return \"texminted\"\n ext == \".txt\" && return \"asciidoc\"\n\n return \"pandoc\"\nend","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can also manually specify it using the doctype keyword option. You can get a list of supported output formats:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"list_out_formats","category":"page"},{"location":"usage/#Weave.list_out_formats","page":"Using Weave","title":"Weave.list_out_formats","text":"list_out_formats()\n\nList supported output formats\n\n\n\n\n\n","category":"function"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"using Weave # hide\nlist_out_formats()","category":"page"},{"location":"usage/#document-syntax-1","page":"Using Weave","title":"Document Syntax","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave uses markdown, Noweb or script syntax for defining the code chunks and documentation chunks. You can also weave Jupyter notebooks. The format is detected based on the file extension, but you can also set it manually using the informat parameter.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"The rules for autodetection are:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"ext == \".jl\" && return \"script\"\next == \".jmd\" && return \"markdown\"\next == \".ipynb\" && return \"notebook\"\nreturn \"noweb\"","category":"page"},{"location":"usage/#Documentation-Chunks-1","page":"Using Weave","title":"Documentation Chunks","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"In markdown and Noweb input formats documentation chunks are the parts that aren't inside code delimiters. Documentation chunks can be written with several different markup languages.","category":"page"},{"location":"usage/#Code-Chunks-1","page":"Using Weave","title":"Code Chunks","text":"","category":"section"},{"location":"usage/#Markdown-Format-1","page":"Using Weave","title":"Markdown Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Markdown code chunks are defined using fenced code blocks with options following on the same line. e.g. to hide code from output you can use:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":" ```julia; echo=false","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Sample document","category":"page"},{"location":"usage/#inline-code-1","page":"Using Weave","title":"Inline Code","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can also add inline code to your documents using","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"`j juliacode`","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"or","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"! juliacode","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"syntax. Using the j code syntax you can insert code anywhere in a line and with the ! syntax the whole line after ! will be executed. The code will be replaced with captured output in the weaved document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"If the code produces figures the filename or base64 encoded string will be added to output e.g. to include a Plots figure in markdown you can use:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"![A plot](`j plot(1:10)`)","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"or to produce any html output:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"! display(\"text/html\", \"Header from julia\");","category":"page"},{"location":"usage/#Noweb-Format-1","page":"Using Weave","title":"Noweb Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Code chunks start with a line marked with <<>>= or <>= and end with line marked with @. The code between the start and end markers is executed and the output is captured to the output document. See chunk options.","category":"page"},{"location":"usage/#Script-Format-1","page":"Using Weave","title":"Script Format","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Weave also support script input format with a markup in comments. These scripts can be executed normally using Julia or published with Weave.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"Lines starting with #', #%% or # %% are treated as document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"All non-document lines are treated as code. You can set chunk options using lines starting with #+ just before code e.g:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"#+ term=true\nhoge # some code comes here","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"The format is identical to Pweave and the concept is similar to publishing documents with MATLAB or using Knitr's spin. Weave will remove the first empty space from each line of documentation.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"See sample document:","category":"page"},{"location":"usage/#Configuration-via-YAML-Header-1","page":"Using Weave","title":"Configuration via YAML Header","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"When weaveing markdown files, you can use YAML header to provide additional metadata and configuration options. See Header Configuration section for more details.","category":"page"},{"location":"usage/#Passing-Runtime-Arguments-to-Documents-1","page":"Using Weave","title":"Passing Runtime Arguments to Documents","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can pass arguments as Dict to the weaved document using the args argument to weave. The arguments will be available as WEAVE_ARGS variable in the document.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"This makes it possible to create the same report easily for e.g. different date ranges of input data from a database or from files with similar format giving the filename as input.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"In order to pass a filename to a document you need call weave using:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"weave(\"mydoc.jmd\", args = Dict(\"filename\" => \"somedata.h5\"))","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"and you can access the filename from document as follows:","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":" ```julia\n print(WEAVE_ARGS[\"filename\"])\n ```","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can use the out_path argument to control the name of the output document.","category":"page"},{"location":"usage/#include_weave-1","page":"Using Weave","title":"include_weave","text":"","category":"section"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"You can call include_weave on a Weave document and run all code chunks within in the current session.","category":"page"},{"location":"usage/#","page":"Using Weave","title":"Using Weave","text":"include_weave","category":"page"},{"location":"usage/#Weave.include_weave","page":"Using Weave","title":"Weave.include_weave","text":"include_weave(source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)\ninclude_weave(m::Module, source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)\n\nInclude code from Weave document calling include_string on all code from doc. Code is run in the path of the include document.\n\n\n\n\n\n","category":"function"},{"location":"getting_started/#Getting-started-1","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"The best way to get started using Weave.jl is to look at the example input and output documents. Examples for different formats are included in the packages examples directory.","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"First have a look at source document using markdown code chunks and Plots.jl for figures: FIR_design.jmd (its path is bound to Weave.SAMPLE_JMD_DOC) and then see the output in different formats:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"HTML: FIR_design.html\nPDF: FIR_design.pdf\nPandoc markdown: FIR_design.txt","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"note: Note\nProducing PDF output requires that you have XeLateX installed.","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"Add dependencies for the example if needed:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"using Pkg; Pkg.add.([\"Plots\", \"DSP\"])","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"Weave the files to your working directory:","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"using Weave\n\n# Julia markdown to HTML\nweave(Weave.SAMPLE_JMD_DOC; doctype = \"md2html\", out_path = :pwd)\n\n# Julia markdown to PDF\nweave(Weave.SAMPLE_JMD_DOC; doctype = \"md2pdf\", out_path = :pwd)\n\n# Julia markdown to Pandoc markdown\nweave(Weave.SAMPLE_JMD_DOC; doctype = \"pandoc\", out_path = :pwd)","category":"page"},{"location":"getting_started/#","page":"Getting started","title":"Getting started","text":"tips: Tips\nWeave.SAMPLE_JMD_DOC is the path of FIR_design.jmd.","category":"page"},{"location":"notebooks/#Working-with-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#Weaving-from-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Weaving from Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"Weave supports using Jupyter Notebooks as input format. This means you can weave notebooks to any supported formats; by default, it will be weaved to HTML.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"weave(\"notebook.ipynb\") # will be weaved to HTML","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"warning: Warning\nYou can't use chunk options with notebooks.","category":"page"},{"location":"notebooks/#Output-to-Jupyter-notebooks-1","page":"Working with Jupyter notebooks","title":"Output to Jupyter notebooks","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"As of Weave 0.5.1. there is new notebook method to convert Weave documents to Jupyter notebooks using nbconvert.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"notebook","category":"page"},{"location":"notebooks/#Weave.notebook","page":"Working with Jupyter notebooks","title":"Weave.notebook","text":"notebook(source::AbstractString; kwargs...)\n\nConvert Weave document source to Jupyter Notebook and execute the code using nbconvert. Ignores all chunk options.\n\nKeyword options\n\nout_path::Union{Symbol,AbstractString} = :pwd: Path where the output is generated can be either of:\n:doc: Path of the source document\n:pwd: Julia working directory (default)\n\"somepath\": String of output directory e.g. \"~/outdir\", or of filename e.g. \"~/outdir/outfile.tex\"\ntimeout = -1: nbconvert cell timeout in seconds. Defaults to -1 (no timeout)\nnbconvert_options::AbstractString = \"\": String of additional options to pass to nbconvert, such as \"--allow-errors\"\njupyter_path::AbstractString = \"jupyter\": Path/command for the Jupyter you want to use. Defaults to \"jupyter\", which runs whatever is linked/alias to that\n\nwarning: Warning\nThe code is not executed by Weave, but by nbconvert. This means that the output doesn't necessarily always work properly; see #116.\n\nnote: Note\nIn order to just convert Weave document to Jupyter Notebook, use convert_doc instead.\n\n\n\n\n\n","category":"function"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"You can specify jupyter used to execute the notebook with the jupyter_path keyword argument (this defaults to the \"jupyter\", i.e. whatever you have linked to that location).","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"Instead, you might want to use the convert_doc method below and run the code in Jupyter.","category":"page"},{"location":"notebooks/#Converting-between-formats-1","page":"Working with Jupyter notebooks","title":"Converting between formats","text":"","category":"section"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"You can convert between all supported input formats using the convert_doc function.","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"To convert from script to notebook:","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc(\"examples/FIR_design.jl\", \"FIR_design.ipynb\")","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"and from notebook to Markdown use:","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc(\"FIR_design.ipynb\", \"FIR_design.jmd\")","category":"page"},{"location":"notebooks/#","page":"Working with Jupyter notebooks","title":"Working with Jupyter notebooks","text":"convert_doc","category":"page"},{"location":"notebooks/#Weave.convert_doc","page":"Working with Jupyter notebooks","title":"Weave.convert_doc","text":"convert_doc(infile::AbstractString, outfile::AbstractString; outformat::Union{Nothing,AbstractString} = nothing)\n\nConvert Weave documents between different formats\n\ninfile: Path of the input document\noutfile: Path of the output document\noutformat = nothing: Output document format (optional). By default (i.e. given nothing) Weave will try to automatically detect it from the outfile's extension. You can also specify either of \"script\", \"markdown\", \"notebook\", or \"noweb\"\n\n\n\n\n\n","category":"function"},{"location":"function_index/#Function-index-1","page":"Function index","title":"Function index","text":"","category":"section"},{"location":"function_index/#","page":"Function index","title":"Function index","text":"","category":"page"},{"location":"#Weave.jl-Scientific-Reports-Using-Julia-1","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"","category":"section"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"This is the documentation of Weave.jl. Weave is a scientific report generator/literate programming tool for Julia. It resembles Pweave, knitr, R Markdown, and Sweave.","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Current features","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Publish markdown directly to HTML and PDF using Julia or Pandoc\nExecute code as in terminal or in a unit of code chunk\nCapture Plots.jl or Gadfly.jl figures\nSupports various input format: Markdown, Noweb, Jupyter Notebook, and ordinal Julia script\nConversions between those input formats\nSupports various output document formats: HTML, PDF, GitHub markdown, Jupyter Notebook, MultiMarkdown, Asciidoc and reStructuredText\nSimple caching of results","category":"page"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"(Image: Weave in Juno demo)","category":"page"},{"location":"#Index-1","page":"Weave.jl - Scientific Reports Using Julia","title":"Index","text":"","category":"section"},{"location":"#","page":"Weave.jl - Scientific Reports Using Julia","title":"Weave.jl - Scientific Reports Using Julia","text":"Pages = [\n \"index.md\",\n \"getting_started.md\",\n \"usage.md\",\n \"publish.md\",\n \"header.md\",\n \"chunk_options.md\",\n \"notebooks.md\",\n \"function_index.md\",\n]","category":"page"}] } diff --git a/previews/PR334/usage/index.html b/previews/PR334/usage/index.html index 6c85e85..aa4663b 100644 --- a/previews/PR334/usage/index.html +++ b/previews/PR334/usage/index.html @@ -1,8 +1,8 @@ -Using Weave · Weave.jl

      Using Weave

      You can write your documentation and code in input document using Markdown, Noweb or script syntax and use weave function to execute to document to capture results and figures.

      weave

      Weave document with markup and julia code using Plots.jl for plots, out_path = :pwd makes the results appear in the current working directory.

      A prepared example

      # First add depencies for the example
      +Using Weave · Weave.jl

      Using Weave

      You can write your documentation and code in input document using Markdown, Noweb or script syntax and use weave function to execute to document to capture results and figures.

      weave

      Weave document with markup and julia code using Plots.jl for plots, out_path = :pwd makes the results appear in the current working directory.

      A prepared example: Weave.SAMPLE_JL_DOC

      # First add depencies for the example
       using Pkg; Pkg.add.(["Plots", "DSP"])
       using Weave
      -weave(joinpath(dirname(pathof(Weave)), "../examples", "FIR_design.jmd"), out_path=:pwd)
      Weave.weaveFunction
      weave(source::AbstractString; kwargs...)

      Weave an input document to output file.

      Keyword options

      • doctype::Union{Nothing,AbstractString} = nothing: Output document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also manually specify it; see list_out_formats() for the supported formats
      • informat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
      • out_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:
        • :doc: Path of the source document (default)
        • :pwd: Julia working directory
        • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
      • args::Dict = Dict(): Arguments to be passed to the weaved document; will be available as WEAVE_ARGS in the document
      • mod::Union{Module,Nothing} = nothing: Module where Weave evals code. You can pass a Module object, otherwise create an new sandbox module.
      • fig_path::AbstractString = "figures": Where figures will be generated, relative to out_path
      • fig_ext::Union{Nothing,AbstractString} = nothing: Extension for saved figures e.g. ".pdf", ".png". Default setting depends on doctype
      • cache_path::AbstractString = "cache": Where of cached output will be saved
      • cache::Symbol = :off: Controls caching of code:
        • :off means no caching (default)
        • :all caches everything
        • :user caches based on chunk options
        • :refresh runs all code chunks and save new cache
      • throw_errors::Bool = false: If false errors are included in output document and the whole document is executed. If true errors are thrown when they occur
      • template::Union{Nothing,AbstractString,Mustache.MustacheTokens} = nothing: Template (file path) or Mustache.MustacheTokenss for md2html or md2tex formats
      • css::Union{Nothing,AbstractString} = nothing: Path of a CSS file used for md2html format
      • highlight_theme::Union{Nothing,Type{<:Highlights.AbstractTheme}} = nothing: Theme used for syntax highlighting (defaults to Highlights.Themes.DefaultTheme)
      • pandoc_options::Vector{<:AbstractString} = String[]: Strings of options to pass to pandoc for pandoc2html and pandoc2pdf formats, e.g. ["--toc", "-N"]
      • latex_cmd::AbstractString = "xelatex": The command used to make PDF file from .tex
      • keep_unicode::Bool = false: If true, do not convert unicode characters to their respective latex representation. This is especially useful if a font and tex-engine with support for unicode characters are used
      Note

      Run Weave from terminal and try to avoid weaving from IJulia or ESS; they tend to mess with capturing output.

      source

      tangle

      Tangling extracts the code from document:

      Weave.tangleFunction
      tangle(source::AbstractString; kwargs...)

      Tangle source code from input document to .jl file.

      Keyword options

      • informat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
      • out_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:
        • :doc: Path of the source document (default)
        • :pwd: Julia working directory
        • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
      source

      Supported Output Formats

      Weave automatically detects the output format based on the file extension. The auto output format detection is handled by detect_doctype(path::AbstractString):

      function detect_doctype(path::AbstractString)
      +weave(Weave.SAMPLE_JL_DOC; out_path=:pwd)
      Weave.weaveFunction
      weave(source::AbstractString; kwargs...)

      Weave an input document to output file.

      Keyword options

      • doctype::Union{Nothing,AbstractString} = nothing: Output document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also manually specify it; see list_out_formats() for the supported formats
      • informat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
      • out_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:
        • :doc: Path of the source document (default)
        • :pwd: Julia working directory
        • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
      • args::Dict = Dict(): Arguments to be passed to the weaved document; will be available as WEAVE_ARGS in the document
      • mod::Union{Module,Nothing} = nothing: Module where Weave evals code. You can pass a Module object, otherwise create an new sandbox module.
      • fig_path::AbstractString = "figures": Where figures will be generated, relative to out_path
      • fig_ext::Union{Nothing,AbstractString} = nothing: Extension for saved figures e.g. ".pdf", ".png". Default setting depends on doctype
      • cache_path::AbstractString = "cache": Where of cached output will be saved
      • cache::Symbol = :off: Controls caching of code:
        • :off means no caching (default)
        • :all caches everything
        • :user caches based on chunk options
        • :refresh runs all code chunks and save new cache
      • throw_errors::Bool = false: If false errors are included in output document and the whole document is executed. If true errors are thrown when they occur
      • template::Union{Nothing,AbstractString,Mustache.MustacheTokens} = nothing: Template (file path) or Mustache.MustacheTokenss for md2html or md2tex formats
      • css::Union{Nothing,AbstractString} = nothing: Path of a CSS file used for md2html format
      • highlight_theme::Union{Nothing,Type{<:Highlights.AbstractTheme}} = nothing: Theme used for syntax highlighting (defaults to Highlights.Themes.DefaultTheme)
      • pandoc_options::Vector{<:AbstractString} = String[]: Strings of options to pass to pandoc for pandoc2html and pandoc2pdf formats, e.g. ["--toc", "-N"]
      • latex_cmd::AbstractString = "xelatex": The command used to make PDF file from .tex
      • keep_unicode::Bool = false: If true, do not convert unicode characters to their respective latex representation. This is especially useful if a font and tex-engine with support for unicode characters are used
      Note

      Run Weave from terminal and try to avoid weaving from IJulia or ESS; they tend to mess with capturing output.

      source

      tangle

      Tangling extracts the code from document:

      Weave.tangleFunction
      tangle(source::AbstractString; kwargs...)

      Tangle source code from input document to .jl file.

      Keyword options

      • informat::Union{Nothing,AbstractString} = nothing: Input document format. By default (i.e. given nothing), Weave will set it automatically based on file extension. You can also specify either of "script", "markdown", "notebook", or "noweb"
      • out_path::Union{Symbol,AbstractString} = :doc: Path where the output is generated can be either of:
        • :doc: Path of the source document (default)
        • :pwd: Julia working directory
        • "somepath": String of output directory e.g. "~/outdir", or of filename e.g. "~/outdir/outfile.tex"
      source

      Supported Output Formats

      Weave automatically detects the output format based on the file extension. The auto output format detection is handled by detect_doctype(path::AbstractString):

      function detect_doctype(path::AbstractString)
           _, ext = lowercase.(splitext(path))
       
           match(r"^\.(jl|.?md|ipynb)", ext) !== nothing && return "md2html"
      @@ -11,7 +11,7 @@ weave(joinpath(dirname(pathof(Weave)), "../examples", "FIR_design
           ext == ".txt"  && return "asciidoc"
       
           return "pandoc"
      -end

      You can also manually specify it using the doctype keyword option. You can get a list of supported output formats:

      list_out_formats()
      github: GitHub markdown
      +end

      You can also manually specify it using the doctype keyword option. You can get a list of supported output formats:

      list_out_formats()
      github: GitHub markdown
       md2tex: Julia markdown to latex
       pandoc2html: Markdown to HTML (requires Pandoc 2)
       pandoc: Pandoc markdown
      @@ -30,4 +30,4 @@ return "noweb"

      Pweave and the concept is similar to publishing documents with MATLAB or using Knitr's spin. Weave will remove the first empty space from each line of documentation.

      See sample document:

      Configuration via YAML Header

      When weaveing markdown files, you can use YAML header to provide additional metadata and configuration options. See Header Configuration section for more details.

      Passing Runtime Arguments to Documents

      You can pass arguments as Dict to the weaved document using the args argument to weave. The arguments will be available as WEAVE_ARGS variable in the document.

      This makes it possible to create the same report easily for e.g. different date ranges of input data from a database or from files with similar format giving the filename as input.

      In order to pass a filename to a document you need call weave using:

      weave("mydoc.jmd", args = Dict("filename" => "somedata.h5"))

      and you can access the filename from document as follows:

          ```julia
           print(WEAVE_ARGS["filename"])
           ```

      You can use the out_path argument to control the name of the output document.

      include_weave

      You can call include_weave on a Weave document and run all code chunks within in the current session.

      Weave.include_weaveFunction
      include_weave(source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)
      -include_weave(m::Module, source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)

      Include code from Weave document calling include_string on all code from doc. Code is run in the path of the include document.

      source
      +include_weave(m::Module, source::AbstractString, informat::Union{Nothing,AbstractString} = nothing)

      Include code from Weave document calling include_string on all code from doc. Code is run in the path of the include document.

      source