mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-02-07 09:18:59 +00:00
72 lines
26 KiB
HTML
72 lines
26 KiB
HTML
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>The basics of org-babel</title><script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script><script id="MathJax-script" async="" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script><script type="text/x-mathjax-config">
|
|
MathJax = {
|
|
tex: {
|
|
inlineMath: [ ['$','$'], ['\(','\)'] ],
|
|
displayMath: [ ['$$','$$'], ['[',']'] ]
|
|
},
|
|
options = {
|
|
processHtmlClass = "math"
|
|
}
|
|
}
|
|
</script><meta name="next-head-count" content="6"/><link rel="preload" href="/wiki/_next/static/css/52fc2ba29703df73922c.css" as="style"/><link rel="stylesheet" href="/wiki/_next/static/css/52fc2ba29703df73922c.css" data-n-g=""/><noscript data-n-css=""></noscript><link rel="preload" href="/wiki/_next/static/chunks/main-ae4733327bd95c4ac325.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/webpack-50bee04d1dc61f8adf5b.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/framework.9d524150d48315f49e80.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/commons.0e1c3f9aa780c2dfe9f0.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/pages/_app-8e3d0c58a60ec788aa69.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/940643274e605e7596ecea1f2ff8d83317a3fb76.4841a16762f602a59f00.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/pages/%5B%5B...slug%5D%5D-1aa198f87ede1cd0e1dc.js" as="script"/></head><body><div id="__next"><main><h1>The basics of org-babel</h1><section class="post-metadata"><span>Date: <!-- -->2021-05-19 18:54:37 +08:00</span><span>Date modified: <!-- -->2021-06-04 11:11:18 +08:00</span></section><nav class="toc"><ol class="toc-level toc-level-1"><li class="toc-item toc-item-h1"><a href="/wiki/text.org-mode.babel#functional-and-scripting-mode" class="toc-link toc-link-h1">Functional and scripting mode</a></li><li class="toc-item toc-item-h1"><a href="/wiki/text.org-mode.babel#functional-mode-values-and-passing-them-around" class="toc-link toc-link-h1">Functional mode values and passing them around</a></li><li class="toc-item toc-item-h1"><a href="/wiki/text.org-mode.babel#source-code-evaluation" class="toc-link toc-link-h1">Source code evaluation</a></li><li class="toc-item toc-item-h1"><a href="/wiki/text.org-mode.babel#creating-dynamic-content-with-meta-programming" class="toc-link toc-link-h1">Creating dynamic content with meta-programming</a></li><li class="toc-item toc-item-h1"><a href="/wiki/text.org-mode.babel#executing-code-blocks-in-the-same-session" class="toc-link toc-link-h1">Executing code blocks in the same session</a></li></ol></nav><p>org-babel (see <a href="/wiki/2020-04-17-21-41-30">Org mode: Babel</a>) is the framework that enables Org mode features for reproducible research.
|
|
It has a variety of applications that Org mode can do in this field so let's enumerate them.
|
|
</p><h1 id="functional-and-scripting-mode">Functional and scripting mode</h1><p>Babel works in two modes: functional and scripting mode.
|
|
</p><ul><li><p>Functional mode returns a value either from the last statement or the return statement.
|
|
The value can then be used in other source code blocks and appropriately converted into Org mode equivalents.
|
|
If the return value is a vector type, it will be printed as tables in Org mode which will then be rendered as a vector when used in another source code block.
|
|
</p></li><li><p>Scripting mode simply prints the output.
|
|
Do keep in mind different languages have different ways of capturing the output.
|
|
</p></li></ul><p>The default mode is in functional mode but you can change it by setting <code class="inline-code">:results</code> header argument with the values from the <a href="https://orgmode.org/manual/Results-of-Evaluation.html">collection class</a>.
|
|
</p><h1 id="functional-mode-values-and-passing-them-around">Functional mode values and passing them around</h1><p>With functional mode, the value return will appear as an appropriate element in the Org mode buffer.
|
|
The following examples are in <a href="https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html">Python</a>.
|
|
</p><p>Scalar values appear as strings...
|
|
</p><pre class="src-block"><code class="language-python">return "The quick brown fox jumps over the lazy dog."
|
|
</code></pre><pre class="fixed-width">The quick brown fox jumps over the lazy dog.</pre><p>
|
|
...and vector values print as tables.
|
|
</p><pre class="src-block"><code class="language-python">return [
|
|
["Monty", 45],
|
|
["Soup", 54],
|
|
["Cabbages", 63]
|
|
]
|
|
</code></pre><table><tbody><tr><td>Monty</td><td>45</td></tr><tr><td>Soup</td><td>54</td></tr><tr><td>Cabbages</td><td>63</td></tr></tbody></table><p>To pass values between different code blocks, you have to give the blocks a name.
|
|
The previous code block was given a name <code class="inline-verbatim">data</code> and passed it to the next block.
|
|
</p><pre class="src-block"><code class="language-python">return o[0]
|
|
</code></pre><table><tbody><tr><td>Monty</td><td>45</td></tr></tbody></table><h1 id="source-code-evaluation">Source code evaluation</h1><p>The header property for executing a source code block is <code class="inline-verbatim">eval</code>.
|
|
It can accept either the following values:
|
|
</p><ul><li><p><code class="inline-verbatim">no</code> to disable evaluation of the code block.
|
|
</p></li><li><p><code class="inline-verbatim">query</code> will prompt to enable evaluation first.
|
|
</p></li><li><p><code class="inline-verbatim">never-export</code> will not show the results in export but can still interact with it from the raw source.
|
|
</p></li></ul><p>By default, it will enable evaluation so you have to explicitly define it (or set it in your Emacs config).
|
|
</p><h1 id="creating-dynamic-content-with-meta-programming">Creating dynamic content with meta-programming</h1><p>With <a href="https://orgmode.org/worg/org-contrib/babel/intro.html">Babel</a>, you can call named code blocks anywhere from blocks to inline.
|
|
This creates a "function" with Babel using different languages.
|
|
The following block creates <code class="inline-code">init</code> function with a default value for its argument.
|
|
</p><pre class="src-block"><code class="language-python">return f"Hello {name}"
|
|
</code></pre><p>You can then call the <code class="inline-code">init</code> function inline with <code class="inline-code">call_init[${HEADER_ARGS}](${ARGS})</code> which should contain "call<sub>init</sub>[:results raw]() Hello world".
|
|
For blocks, you can use the <code class="inline-code">#+call</code> block with a similar syntax to inline functions — i.e., <code class="inline-code">#+call: init[${HEADER_ARGS}](${ARGS})</code>.
|
|
</p><pre class="fixed-width">Hello world</pre><p>
|
|
You can also use it inside of code blocks with <code class="inline-code"><<init>></code> which makes it perfect for code blocks templates like configuring paper output for Lilypond blocks.
|
|
Though, you have to set <code class="inline-code">:noweb yes</code> in the header arguments or configure it in <code class="inline-code">org-babel-default-header-args</code> as one of the default.
|
|
</p><pre class="src-block"><code class="language-shell">echo -n <<init(name="Canavan")>>
|
|
</code></pre><pre class="fixed-width">Hello Canavan</pre><p>
|
|
Babel functions are commonly used for inserting dynamic values.
|
|
Very helpful in reducing places you need to edit (not to mention less prone to errors).
|
|
</p><h1 id="executing-code-blocks-in-the-same-session">Executing code blocks in the same session</h1><p>Each of the source code block runs on an individual session.
|
|
However, you can connect source code blocks in the same session with <code class="inline-code">:session <SESSION NAME></code>.
|
|
This allows you to cut code blocks and add more detailed explanations for them.
|
|
</p><p>Let's start with a simple example where we want to demonstrate some Python shenanigans.
|
|
Here's one Python code block.
|
|
</p><pre class="src-block"><code class="language-python">x = 30
|
|
print(x)
|
|
</code></pre><pre class="fixed-width">30</pre><p>
|
|
Then here's another code block in the same session.
|
|
</p><pre class="src-block"><code class="language-python">for i in range(5):
|
|
x += 5
|
|
print(x)
|
|
</code></pre><pre class="fixed-width">35
|
|
40
|
|
45
|
|
50
|
|
55</pre><p>
|
|
In certain code where the output can still change (for example, try executing the previous code block again), this may not be the desired behavior.
|
|
To correct this, simply execute <code class="inline-code">org-babel-execute-buffer</code>.
|
|
</p><section><h2>Backlinks</h2><ul><li><a href="/wiki/2020-04-17-21-41-30">Org mode: Babel</a></li></ul></section></main></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"metadata":{"date":"\"2021-05-19 18:54:37 +08:00\"","date_modified":"\"2021-06-04 11:11:18 +08:00\"","language":"en","source":""},"title":"The basics of org-babel","hast":{"type":"root","children":[{"type":"element","tagName":"nav","properties":{"className":"toc"},"children":[{"type":"element","tagName":"ol","properties":{"className":"toc-level toc-level-1"},"children":[{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"functional-and-scripting-mode"},"children":[{"type":"text","value":"Functional and scripting mode"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/text.org-mode.babel#functional-and-scripting-mode"},"children":[{"type":"text","value":"Functional and scripting mode"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"functional-mode-values-and-passing-them-around"},"children":[{"type":"text","value":"Functional mode values and passing them around"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/text.org-mode.babel#functional-mode-values-and-passing-them-around"},"children":[{"type":"text","value":"Functional mode values and passing them around"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"source-code-evaluation"},"children":[{"type":"text","value":"Source code evaluation"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/text.org-mode.babel#source-code-evaluation"},"children":[{"type":"text","value":"Source code evaluation"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"creating-dynamic-content-with-meta-programming"},"children":[{"type":"text","value":"Creating dynamic content with meta-programming"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/text.org-mode.babel#creating-dynamic-content-with-meta-programming"},"children":[{"type":"text","value":"Creating dynamic content with meta-programming"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"executing-code-blocks-in-the-same-session"},"children":[{"type":"text","value":"Executing code blocks in the same session"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/text.org-mode.babel#executing-code-blocks-in-the-same-session"},"children":[{"type":"text","value":"Executing code blocks in the same session"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"org-babel (see "},{"type":"element","tagName":"a","properties":{"href":"/2020-04-17-21-41-30"},"children":[{"type":"text","value":"Org mode: Babel"}]},{"type":"text","value":") is the framework that enables Org mode features for reproducible research.\nIt has a variety of applications that Org mode can do in this field so let's enumerate them.\n"}]},{"type":"element","tagName":"h1","properties":{"id":"functional-and-scripting-mode"},"children":[{"type":"text","value":"Functional and scripting mode"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Babel works in two modes: functional and scripting mode.\n"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Functional mode returns a value either from the last statement or the return statement.\n The value can then be used in other source code blocks and appropriately converted into Org mode equivalents.\n If the return value is a vector type, it will be printed as tables in Org mode which will then be rendered as a vector when used in another source code block.\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Scripting mode simply prints the output.\n Do keep in mind different languages have different ways of capturing the output.\n "}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The default mode is in functional mode but you can change it by setting "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":":results"}]},{"type":"text","value":" header argument with the values from the "},{"type":"element","tagName":"a","properties":{"href":"https://orgmode.org/manual/Results-of-Evaluation.html"},"children":[{"type":"text","value":"collection class"}]},{"type":"text","value":".\n"}]},{"type":"element","tagName":"h1","properties":{"id":"functional-mode-values-and-passing-them-around"},"children":[{"type":"text","value":"Functional mode values and passing them around"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"With functional mode, the value return will appear as an appropriate element in the Org mode buffer.\nThe following examples are in "},{"type":"element","tagName":"a","properties":{"href":"https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html"},"children":[{"type":"text","value":"Python"}]},{"type":"text","value":".\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Scalar values appear as strings...\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"return \"The quick brown fox jumps over the lazy dog.\"\n"}]}]},{"type":"element","tagName":"pre","properties":{"className":["fixed-width"]},"children":[{"type":"text","value":"The quick brown fox jumps over the lazy dog."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\n...and vector values print as tables.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"return [\n [\"Monty\", 45],\n [\"Soup\", 54],\n [\"Cabbages\", 63]\n]\n"}]}]},{"type":"element","tagName":"table","properties":{},"children":[{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"Monty"}]},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"45"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"Soup"}]},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"54"}]}]},{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"Cabbages"}]},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"63"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To pass values between different code blocks, you have to give the blocks a name.\nThe previous code block was given a name "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"data"}]},{"type":"text","value":" and passed it to the next block.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"return o[0]\n"}]}]},{"type":"element","tagName":"table","properties":{},"children":[{"type":"element","tagName":"tbody","properties":{},"children":[{"type":"element","tagName":"tr","properties":{},"children":[{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"Monty"}]},{"type":"element","tagName":"td","properties":{},"children":[{"type":"text","value":"45"}]}]}]}]},{"type":"element","tagName":"h1","properties":{"id":"source-code-evaluation"},"children":[{"type":"text","value":"Source code evaluation"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The header property for executing a source code block is "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"eval"}]},{"type":"text","value":".\nIt can accept either the following values:\n"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"no"}]},{"type":"text","value":" to disable evaluation of the code block.\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"query"}]},{"type":"text","value":" will prompt to enable evaluation first.\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"never-export"}]},{"type":"text","value":" will not show the results in export but can still interact with it from the raw source.\n"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"By default, it will enable evaluation so you have to explicitly define it (or set it in your Emacs config).\n"}]},{"type":"element","tagName":"h1","properties":{"id":"creating-dynamic-content-with-meta-programming"},"children":[{"type":"text","value":"Creating dynamic content with meta-programming"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"With "},{"type":"element","tagName":"a","properties":{"href":"https://orgmode.org/worg/org-contrib/babel/intro.html"},"children":[{"type":"text","value":"Babel"}]},{"type":"text","value":", you can call named code blocks anywhere from blocks to inline.\nThis creates a \"function\" with Babel using different languages.\nThe following block creates "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"init"}]},{"type":"text","value":" function with a default value for its argument.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"return f\"Hello {name}\"\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can then call the "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"init"}]},{"type":"text","value":" function inline with "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"call_init[${HEADER_ARGS}](${ARGS})"}]},{"type":"text","value":" which should contain \"call"},{"type":"element","tagName":"sub","properties":{},"children":[{"type":"text","value":"init"}]},{"type":"text","value":"[:results raw]() Hello world\".\nFor blocks, you can use the "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"#+call"}]},{"type":"text","value":" block with a similar syntax to inline functions — i.e., "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"#+call: init[${HEADER_ARGS}](${ARGS})"}]},{"type":"text","value":".\n"}]},{"type":"element","tagName":"pre","properties":{"className":["fixed-width"]},"children":[{"type":"text","value":"Hello world"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\nYou can also use it inside of code blocks with "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"\u003c\u003cinit\u003e\u003e"}]},{"type":"text","value":" which makes it perfect for code blocks templates like configuring paper output for Lilypond blocks.\nThough, you have to set "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":":noweb yes"}]},{"type":"text","value":" in the header arguments or configure it in "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"org-babel-default-header-args"}]},{"type":"text","value":" as one of the default.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-shell"]},"children":[{"type":"text","value":"echo -n \u003c\u003cinit(name=\"Canavan\")\u003e\u003e\n"}]}]},{"type":"element","tagName":"pre","properties":{"className":["fixed-width"]},"children":[{"type":"text","value":"Hello Canavan"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\nBabel functions are commonly used for inserting dynamic values.\nVery helpful in reducing places you need to edit (not to mention less prone to errors).\n"}]},{"type":"element","tagName":"h1","properties":{"id":"executing-code-blocks-in-the-same-session"},"children":[{"type":"text","value":"Executing code blocks in the same session"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Each of the source code block runs on an individual session.\nHowever, you can connect source code blocks in the same session with "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":":session \u003cSESSION NAME\u003e"}]},{"type":"text","value":".\nThis allows you to cut code blocks and add more detailed explanations for them.\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Let's start with a simple example where we want to demonstrate some Python shenanigans.\nHere's one Python code block.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"x = 30\nprint(x)\n"}]}]},{"type":"element","tagName":"pre","properties":{"className":["fixed-width"]},"children":[{"type":"text","value":"30"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\nThen here's another code block in the same session.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"text","value":"for i in range(5):\n x += 5\n print(x)\n"}]}]},{"type":"element","tagName":"pre","properties":{"className":["fixed-width"]},"children":[{"type":"text","value":"35\n40\n45\n50\n55"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\nIn certain code where the output can still change (for example, try executing the previous code block again), this may not be the desired behavior.\nTo correct this, simply execute "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"org-babel-execute-buffer"}]},{"type":"text","value":".\n"}]}]},"backlinks":[{"path":"/2020-04-17-21-41-30","title":"Org mode: Babel"}]},"__N_SSG":true},"page":"/[[...slug]]","query":{"slug":["text.org-mode.babel"]},"buildId":"Ie9t5zutrXP6Of75Cb5xF","assetPrefix":"/wiki","nextExport":false,"isFallback":false,"gsp":true}</script><script nomodule="" src="/wiki/_next/static/chunks/polyfills-99d808df29361cf7ffb1.js"></script><script src="/wiki/_next/static/chunks/main-ae4733327bd95c4ac325.js" async=""></script><script src="/wiki/_next/static/chunks/webpack-50bee04d1dc61f8adf5b.js" async=""></script><script src="/wiki/_next/static/chunks/framework.9d524150d48315f49e80.js" async=""></script><script src="/wiki/_next/static/chunks/commons.0e1c3f9aa780c2dfe9f0.js" async=""></script><script src="/wiki/_next/static/chunks/pages/_app-8e3d0c58a60ec788aa69.js" async=""></script><script src="/wiki/_next/static/chunks/940643274e605e7596ecea1f2ff8d83317a3fb76.4841a16762f602a59f00.js" async=""></script><script src="/wiki/_next/static/chunks/pages/%5B%5B...slug%5D%5D-1aa198f87ede1cd0e1dc.js" async=""></script><script src="/wiki/_next/static/Ie9t5zutrXP6Of75Cb5xF/_buildManifest.js" async=""></script><script src="/wiki/_next/static/Ie9t5zutrXP6Of75Cb5xF/_ssgManifest.js" async=""></script></body></html> |