From 20f6ecb81f553e4235c7aab16375258674a466e3 Mon Sep 17 00:00:00 2001 From: George Cushen Date: Sun, 5 Nov 2023 00:08:40 +0000 Subject: [PATCH] feat: auto-import Jupyter Notebooks as blog posts --- .../.github/workflows/import-notebooks.yml | 54 ++++++ .../featured.png | Bin .../content/post/blog-with-jupyter/index.md | 34 ++++ .../output_1_0.png} | Bin .../academic/content/post/jupyter/index.md | 77 -------- .../blog-with-jupyter.ipynb} | 164 +++++++----------- 6 files changed, 149 insertions(+), 180 deletions(-) create mode 100644 starters/academic/.github/workflows/import-notebooks.yml rename starters/academic/content/post/{jupyter => blog-with-jupyter}/featured.png (100%) create mode 100644 starters/academic/content/post/blog-with-jupyter/index.md rename starters/academic/content/post/{jupyter/index_1_0.png => blog-with-jupyter/output_1_0.png} (100%) delete mode 100644 starters/academic/content/post/jupyter/index.md rename starters/academic/{content/post/jupyter/index.ipynb => notebooks/blog-with-jupyter.ipynb} (80%) diff --git a/starters/academic/.github/workflows/import-notebooks.yml b/starters/academic/.github/workflows/import-notebooks.yml new file mode 100644 index 00000000..f500abf2 --- /dev/null +++ b/starters/academic/.github/workflows/import-notebooks.yml @@ -0,0 +1,54 @@ +# Wowchemy GitHub Action to import Jupyter Notebooks as blog posts +name: Import Jupyter Notebooks as Blog Posts + +# Require permission to create a PR +permissions: + contents: write + pull-requests: write + +# Run workflow when a `.bib` file is added or updated in the `data/` folder +on: + push: + branches: ['main'] + paths: ['notebooks/*.ipynb'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + wowchemy: + if: github.repository_owner != 'wowchemy' + runs-on: ubuntu-latest + steps: + - name: Checkout the repo + uses: actions/checkout@v3 + - name: Set up Python 3.12 + uses: actions/setup-python@v4 + with: + python-version: "3.12" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install academic==0.11.1 + - name: Run Academic Converter Tool + run: academic import 'notebooks/*.ipynb' content/post/ --verbose + - name: Create Pull Request + # Set ID for `Check outputs` stage + id: cpr + uses: peter-evans/create-pull-request@v5 + with: + commit-message: 'content: import blog posts from `notebooks/` folder' + title: Wowchemy - Import latest blog posts + body: | + Convert Jupyter Notebooks in the `notebooks/` folder into blog posts in the `content/post/` folder. + 将`notebooks/`文件夹中的Jupyter笔记本转换为`content/post/`文件夹中的博客帖子。 + [View Documentation](https://github.com/wowchemy/bibtex-to-markdown) + base: main + labels: automated-pr, content + branch: wowchemy-import-posts + delete-branch: true + - name: Check outputs + if: ${{ steps.cpr.outputs.pull-request-number }} + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" diff --git a/starters/academic/content/post/jupyter/featured.png b/starters/academic/content/post/blog-with-jupyter/featured.png similarity index 100% rename from starters/academic/content/post/jupyter/featured.png rename to starters/academic/content/post/blog-with-jupyter/featured.png diff --git a/starters/academic/content/post/blog-with-jupyter/index.md b/starters/academic/content/post/blog-with-jupyter/index.md new file mode 100644 index 00000000..3feaa7a2 --- /dev/null +++ b/starters/academic/content/post/blog-with-jupyter/index.md @@ -0,0 +1,34 @@ +--- +title: Blog with Jupyter Notebooks! +date: '2023-11-04' +summary: Easily blog from Jupyter notebooks! +--- + + +```python +from IPython.core.display import Image +Image('https://www.python.org/static/community_logos/python-logo-master-v3-TM-flattened.png') +``` + + +![png](output_1_0.png) + + +```python +print("Welcome to Academic!") +``` + + Welcome to Academic! + +## Organize your notebooks + +Place the notebooks that you would like to publish in a `notebooks` folder at the root of your website. + +## Import the notebooks into your site + +```bash +pipx install academic +academic import 'notebooks/**.ipynb' content/post/ --verbose +``` + +The notebooks will be published to the folder you specify above. In this case, they will be published to your `content/post/` folder. diff --git a/starters/academic/content/post/jupyter/index_1_0.png b/starters/academic/content/post/blog-with-jupyter/output_1_0.png similarity index 100% rename from starters/academic/content/post/jupyter/index_1_0.png rename to starters/academic/content/post/blog-with-jupyter/output_1_0.png diff --git a/starters/academic/content/post/jupyter/index.md b/starters/academic/content/post/jupyter/index.md deleted file mode 100644 index 70f343df..00000000 --- a/starters/academic/content/post/jupyter/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Display Jupyter Notebooks with Academic -subtitle: Learn how to blog in Academic using Jupyter notebooks -summary: Learn how to blog in Academic using Jupyter notebooks -authors: - - admin -tags: [] -categories: [] -projects: [] -date: '2019-02-05T00:00:00Z' -lastMod: '2019-09-05T00:00:00Z' -image: - caption: '' - focal_point: '' ---- - -```python -from IPython.core.display import Image -Image('https://www.python.org/static/community_logos/python-logo-master-v3-TM-flattened.png') -``` - -![png](./index_1_0.png) - -```python -print("Welcome to Academic!") -``` - - Welcome to Academic! - -## Install Python and JupyterLab - -[Install Anaconda](https://www.anaconda.com/distribution/#download-section) which includes Python 3 and JupyterLab. - -Alternatively, install JupyterLab with `pip3 install jupyterlab`. - -## Create or upload a Jupyter notebook - -Run the following commands in your Terminal, substituting `` and `` with the file path to your Academic website folder and a short title for your blog post (use hyphens instead of spaces), respectively: - -```bash -mkdir -p /content/post// -cd /content/post// -jupyter lab index.ipynb -``` - -The `jupyter` command above will launch the JupyterLab editor, allowing us to add Academic metadata and write the content. - -## Edit your post metadata - -The first cell of your Jupter notebook will contain your post metadata ([front matter](https://sourcethemes.com/academic/docs/front-matter/)). - -In Jupter, choose _Markdown_ as the type of the first cell and wrap your Academic metadata in three dashes, indicating that it is YAML front matter: - -``` ---- -title: My post's title -date: 2019-09-01 - -# Put any other Academic metadata here... ---- -``` - -Edit the metadata of your post, using the [documentation](https://sourcethemes.com/academic/docs/managing-content) as a guide to the available options. - -To set a [featured image](https://sourcethemes.com/academic/docs/managing-content/#featured-image), place an image named `featured` into your post's folder. - -For other tips, such as using math, see the guide on [writing content with Academic](https://wowchemy.com/docs/content/writing-markdown-latex/). - -## Convert notebook to Markdown - -```bash -jupyter nbconvert index.ipynb --to markdown --NbConvertApp.output_files_dir=. -``` - -## Example - -This post was created with Jupyter. The orginal files can be found at https://github.com/gcushen/hugo-academic/tree/master/exampleSite/content/post/jupyter diff --git a/starters/academic/content/post/jupyter/index.ipynb b/starters/academic/notebooks/blog-with-jupyter.ipynb similarity index 80% rename from starters/academic/content/post/jupyter/index.ipynb rename to starters/academic/notebooks/blog-with-jupyter.ipynb index f8d10de2..12b8442c 100644 --- a/starters/academic/content/post/jupyter/index.ipynb +++ b/starters/academic/notebooks/blog-with-jupyter.ipynb @@ -1,51 +1,36 @@ { "cells": [ { - "cell_type": "raw", - "metadata": {}, + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ - "---\n", - "title: Display Jupyter Notebooks with Academic\n", - "subtitle: Learn how to blog in Academic using Jupyter notebooks\n", - "summary: Learn how to blog in Academic using Jupyter notebooks\n", - "authors:\n", - "- admin\n", - "tags: []\n", - "categories: []\n", - "date: \"2019-02-05T00:00:00Z\"\n", - "lastMod: \"2019-09-05T00:00:00Z\"\n", - "featured: false\n", - "draft: false\n", - "\n", - "# Featured image\n", - "# To use, add an image named `featured.jpg/png` to your page's folder. \n", - "image:\n", - " caption: \"\"\n", - " focal_point: \"\"\n", - "\n", - "# Projects (optional).\n", - "# Associate this post with one or more of your projects.\n", - "# Simply enter your project's folder or file name without extension.\n", - "# E.g. `projects = [\"internal-project\"]` references \n", - "# `content/project/deep-learning/index.md`.\n", - "# Otherwise, set `projects = []`.\n", - "projects: []\n", - "---" + "# Blog with Jupyter Notebooks!" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-04T20:14:14.562747Z", + "start_time": "2023-11-04T20:14:14.488817Z" + } + }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAADLCAYAAABdyYYmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNi8wNS8wNE2+5nEAAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAAgAElEQVR4nO3df4wb14Ef8K8U2TJHPyyZG9tra9SzHXESXNKQcpKeKdTORVSCwtm93B/XVVLgEPbiBpCApEFXV6NANo1yRdXzormiWF1aO6GAtlfvFW1SblXk4t00daJxfjQic3GQzMq/ItpexdnRr5VIWbI1/YM73OFwfrwhZ4Yc7vcD2OQM37x53F0tv/vemzcbDMMwQERERESh2tjvBhARERENI4YsIiIioggwZBERERFFgCGLiIiIKAIMWUREREQRYMgiIiIiigBDFhEREVEEGLKIiIiIIsCQRURERBQBhiwiIiKiCDBkEREREUWAIYuIiIgoAgxZRERERBFgyCIiIiKKAEMWERERUQQYsoiIiIgiwJBFREREFAGGLCIiIqIIMGQRERERRYAhi4iIiCgCDFlEREREEWDIIiIiIooAQxYRERFRBBiyiIiIiCLAkEVEREQUAYYsIiIioggwZBERERFFgCGLiIiIKAIMWUREQ6her0NVVczMzKBWq/W7OUTr0qZ+N4CIiMKh6zoqlQo0TUO1Wm3tP3DgQB9bRbR+MWQRESWYGaxUVWWPFdGAYcgiIkqwUqkETdP63QwicsCQtU6cOXcZSxcaWDy3AsDAmaUVrDSuAwDOXazj9YsNwDAsRxiAsfoIYHRHCnfvkFrbD943AsDA6M4tGN2Zwp7RHdiWuiXGd0RERDTYGLKG0JlzKzj98nmcfuU8zpxbwdLFeltgAtAKVIa5z+h8DZbXli7UsXThamu78tJv18qs1r0tdQveNXo7HrzvnXj4d+9B5p4dkbw/IiKiJGDIGhJnzq3g6R/+GpVXLmDpQgPoCE8uAcslfLke79HbtdK4jsqLv0Xlxd/iqflfIHPPDkzs24NHP/A7vb9BIiKihGHISrjTr1zA17/3Ik6/ct6SlboJWIb/8R4By+n4xdcu4Ct//WM89czz+OI//BD2PnBnV++RiIgoibhOVoL9xbc1HD7x/8QClmHEELAMx+OXLlzFoa99F0995/nu3igREVECMWQl1J996xeY/eFZ+AWc9u1eA5YB74CFzvLG2vZTzzyPr8z+KOhbJSIiSiQOFybQ17/3Ek5WX4dvwGnb9gpYQQKX1/HoDFi2sid/8hIAA1+c+D3Rt0tERJRI7MlKmKWLDTz1vRcRLGAZ0Qcsy3CkX90nf/ISZr//K+H3TERElETsyUqYr3+v2RPkFmJGd9yGiYd+B5nR7di6eROWLjbw9HMv4/RLukN5l4Blfw3wnpMVcEI8DANf/dZP8fDv7sLoHVsDfgWIiIiSgSErYdYmuXeGmD13b8Pxf/whbL1tbVHQPaPb8fB77sLJ0zV85X/8DO4hyKW3CmgPUV1PiO88/qnv/BxfPPiQ4DsnSr56vQ5JkvrdDKLIlMtl3zLj4+Mol8sYGRlBPp93LadpGjRNw759+5BOp8NsZmw4XJggSxcb7WtgWQLW1ts2dQQsq0f3yvjMR/Y4DPFZty3PAwUsA0EDFgCc/PELWDp/xftNEyWcrusol8t4/PHHsbCw0O/mEEVqw4YNbf/Nzc117AOAubk5lEol6LruWtfc3Bzm5uY8yww69mQlyLmL1+A2DPdo7l7XgGWayN+PpxZW73EWaEJ7j/O1HMs3H599voaJh9/j2W6ipKnX61BVlTdtpnVnbGysbbtcLnfsM42MjKBarWL//v0dr+m6PhT/dhiyEmTl2o3VZ50h5uF3+y/0ue22W5AZvR2Lr19cqwfoak5V+7ZTebEesNMvnmPIoqFQr9dRrVZRqVRQrVb73RyigVcoFPDMM884hqz5+Xnk83nMz8/3oWXh4XBhgpw5t9I5xAfYQpK3LZvNXB1HwDK8hxgNYKV+XbjtRINsYWEBpVKJAYtIkCzLkCQJmqZ1vKaqKgqFQh9aFS6GrCTxuE3O4tJloSoqLy8jvIBlOJQXPH617JUGQxYR0XpVKBSgqmrbvmq1ClmWEzvZ3YohK3Gsk9aN1T0GTp5+1ffIk6fPIljAMhzKu0yI9wpYHmtoLb6W3AmNRETUm1wuB1VVUa/XW/tUVfW86jBJGLKSyGEV9zPnLuGrJ3/hesji0iV89X/93Hb8aogKMqfKQGfAgrW8LaAJ95YREdF6k0qlkM/n8dxzzwFoTnjXNI0hi/rE4zY5s8+9hD/9zz/B0oW1vwhWrt3AydNncejJH+DKtRu9TVoXmW9l2LYtrXU6FzMWEdH6tm/fPjzzzDMAhqsXC+DVhQnjHrDMxPLsL5fw7C+XsPW2TRjdIeHM0iV0hh6BgBXKfC3v4w1GLCKidS+TyQBoLj566tQpHD58uM8tCg9DVuIYlrzi3st0pXEDZxqXHF9rPniEoNAClnuYY8AiIiLTgQMHcOLECUiSBFmW+92c0HC4MGFEAlb7nCjba0DnnKrAActwKN9lwAqw/AQREQ2nfD6P5eXloVi2wYo9WQniG7D8Ak5bGafyAYYTuzzecGoHERENpSeffFJofyqVcizrdnxSMGQlide6VANymxyvHjHngMWwRUREw4khK4m6CDh9C1iWtbzc20ZERDR8GLKSpq8BS+T49oBleJa11k1ERDRcGLIS5DMfyeAzH8nEcq5DX1vA6RfegHDAcpx/5VK29cCARUREw4shi5x59WAJLzIq2FtGobDfZHWQL4XWdX0o7ktGyVGr1dpu3WIaGRkZqp9FXdexvLzcsX+Qfx8MM4Ys8uE2wd7htW4CFjNWILVaDbVaDWfPnkWtVoOu69B1//s/ptNpyLIMRVGQy+X68qFSr9dRrVahqio0TUv8VUPriT3AA4P9oW3emkXTtNa/GT+ZTKb1b0RRFEiSFENLu2e+x+XlZWialqjfBevJBsPgtfRxunLtBk6/fB6L5y5j6UKj7RY4RsczpyE6+7ZXj5DPpHXDVtby/IXXL2Kl/qbLuZzqFglYzsf/6N//k7Xdl04A119pr9+pnWZdm98L3HInIP09YOMWDCMzlFSrVce/xLuhKAr279+PXC4XSn1uzGBVqVRQrVbbXoszZM3NzaFcLnuWGR8fx9jYmG9d09PTjqEjTIqiYHJyUqisSHuOHDnSWlXbS71ebwsni4uLvsfIsoxMJoN9+/b1PXSpqur4s9aNfD6PfD4PRVFCaFnvzO9NtVpthaowKIrSeq8UPvZkxeRk5TU8+8vf4NlfWeY5edyHMPRJ63HfJifQ8RbXfw28+QtbwLLVYX1sPL+2vfX3gTs+BWy6s7PehNE0Daqqhhqs7PVrmgZFUTAxMRH6h2OYH3YULa8gLMLsKVpYWICiKBgbG4s9mKiqinK5HFrwMOtUVbVv78kU1++CcrmMYrE4MKFyWDBkRez0K+fxZ9983tJj1Rli1nKEYMBymtM0SLfJCRrQ2th7sASClvm48l3g6g+B9GPA9v1IIk3TMDc3F3lPifV8R48eRbFYDPUv2VKpFFpdFA1d11Eul0P98DY/sPfv34+DBw+GUqeXer2O48ePR/rvxfqexsfHYxtGjPt3ga7rmJ6eju17t14wZEXkyrW38Bff/hVOVl71DDHiAcsl4LTV1153x2t9DVgOxzuNVHcbsMyD374KvPFV4MZvgPSnOusfULVaDbOzs7H9QrUrlUrQNA3FYrEv56f41Ot1zM7OQlXVyM6xsLCAxcVFTE5ORhZKNE3D8ePHI+ndcbKwsIBqtYrDhw9HOiwad7iyi+N7t54wZEXgyrW3cKj0Y5w5d7m3gBXabXIc6nYasgvtNjlBAlaIPVnW48//l+Zcre2Dfx+scrmMubm5ro93moDsdiWVF/NDl0FreM3Pz2Nubi6WYFKr1TA9PR3Jh7Wqqn3pLTV7ew4dOhT6sJqu65idnUWlUgl8rFtbug1qUX7v1huGrJAFC1geISiG+wgGO76zrcIBy6+3rEOPAct8PPdvgc33N/8bQLquY2ZmRujKJ6tcLgdFUVoTjt3Yr+YToaoqRkZGhCaAr1duvRjLy8u+c4LS6TRGRka6Pke3lpeXUS6Xu/rQlSSp61BWq9Vw/Phx4Un8IoIGLFmWW/9mdu3a1RYarFchig6b1ut1TE9PhzrEHjT85nI5ZLNZKIrie3Xg4uIiKpUKVFUN9H00e9f5R1dvGLJC9s//a8USsDpDjGMw6SkgCYSYMAOW321y7Mf7ti2inizz8Y3/AMj/BoPG/EtR9JeeeQVQNpsV/stSkqTWVUOapqFUKglNDC6Xy8hkMpwA62JiYsJxv8gVjPv27etLgBUNJel0unVpvyzLHR/gtVqtNSFc9GdX0zQsLCxg//7e50kGCVi5XA779+/3/DlOp9OtfyP1eh0LCwuYn58Xem+zs7OQZbmnQKzremuo3o8kSSgUCigUCkilUsLnyGQyyGQyGB8fx/z8vO/PqJWqqshms5FfhTzMGLJCNPvDX+P0y+aHWFgBy6O3q+eAFTAECd2HsJsw115NaAELBnD1b4FLzwC3H+g8V58ECVj5fB7j4+M9r2WjKAqmpqYwPT0t1HNWKpUwNTXFoYJ1IpfLtUK8F1mWMTExgfHxcZRKJeGhraeffhrZbLann+NarSYUsCRJ6mo4T5IkjI2NIZ/PCwUfs0dramqqq/elqipmZ2d9fw90G67sUqlU6yrJmZkZ4ZA8OzvLkNWDjf1uwLBYutjAU999YXXLJZgYsAWCqAOW4VBe8HiHthrm++g4V0gBq605tsDkF7AMa3lbm85/y/1cfSAyLJBOpzE1NYVisRjaYoGSJGFyclLoL29d13uaJ0bJkM/ncezYMRw6dMg3YFmlUikcOnQo0HBZkB4Uu3q9jpmZGd9ysixjamqqp17YdDqNyclJofdmtqub4VSR3kDzj6OxsbGeApZVJpMJNNfKHFKl7jBkheTr/+cFXLl2A20hwh6wuu1B8gwxgj1QXue3tNXtXOY7cT6XW9vgUt4W0KzsASlwT5atTQaAay8A117EoBD5hVwsFiO5gkmSJBw+fFjoF+z8/Hyo6w7R4FAUBUeOHOk5xBeLReFejqBzgqxOnDjh+7No/hER1h8lonOuzDXCohBGL7YTWZYDzbXienfdY8gKwdLFBk5WXoNTwOktYIXQS9QxydwW0ATCXPcBy/Bom9H20KajJ8sanqyPtv0dr1mOP/9NhxOtT+l0WnheUC+9DzR4JElCsVjE5OSk0ArwIorFonCvyHPPPRe4fk3ThIYlDx06FPrwtuhCveVyOfAFLP0WZK5V0t7bIGHICsGzvwy6iru5TzSECAYsw77tULdTz5Bj3SIBy+goLxwmW4faUpZTQLK/17YytnZ09GStbl8+BVpTKBSE/kJWVZW9WUMil8vh2LFjod8+JZVKuV4MYNfN8gQi87D8Jrh3S5Ik4fc2Ozsb+vmjJvreGLK6x5AVgpOVV5tPhAKWsfafVwhpPbiEGIEhPu+6RQKWQ3gJcHzbc8e2GsjscricvSNg+fRS2c/h1Mv19pWBGjIcBIWC2Bpi8/PzEbeEonbw4EEcOnQotHk9dvl8XqgXKeiHtUjIlyQJ4+PjgeoNwryy14+5FESSmDeL9hPXgq/DiCGrR1eu3VhdsmEtEAS+D6E9hADw7CUKZUK8ue0VsOBzvNf53eu2NBBbpc1o8/YVdAYsazusAcuhTq95W+zNaiPaoxHlyuAUjzhu3Cw6UTxIz6jIcPVDDz0U+VWwoiEuiReL8MrBaDFk9ej0K+dtAQuCAcslhADtIaaLIT7nuty2O48Xv02OQ9vatr2+Dk333LGtbRvXX3YIWLYeq24CFgBc4eRNK0mShK4oMxc1JfIiOlwnGrI0TRMqe+BA9MuzpNNpoX8rom0eJFwPL1oMWT06s3R59ZngbXK8QohZxhTZFYcCAcs+HOl3fNC5ZKv2Zu5d23ANWD6P1vN7PV79Wcf51zvRX7DdzKWh9SXIEhAiRHpQnRZMjYpoz2/ShtejGkKmJoasHp1++TzWApYl4LiFAK8QIhSwHHqQnEKMb0DqbGugVdxDCFgA8KA1ZDWe7zwmrIBl1tsw1zIjQDxkJW2uCfVHmIFHpPc0rCskReRyOaFhyaT9W4ljKHk9Y8jq0U9fXrYErFWuQ3wiISRgD1LXAau9reHeJkcsYD3y/vtxt3W4cGWh/WsXdsAywN4sG9FfsLquJ24YhOIncl9GEYuLi0KTreOeTyQS6mq1Gv+tUAtDVg+WLjaaT4R7oOATQkRCjFP5IAGts62et8lxuSrQt26fgAUABz/y/rWNt96wXP0XUcBiT5Yj0d4AXsZNcRHtDYq7F4Y9vxQUQ1YPzixdRvCAhbV9gQNWDwGtLTA1nzdrczqXW90i79WlvM3Bj7wfe/fcs7bj/F+t1SPSk9VNwDIAXF9ybdN6Jdr7wJBFcRG9YXLc99YUDXX8t0ImhqweLC5dWn0WsAfJM8QI9kAFDVi23i7DrWzroZuA5RTQOmV2jeCxRz+0tqPxc+Dygnsw6rYny+m4FV4lZyc6j4Z/nVNcRELKrl27YmhJO9GeLIYsMjFk9aA5XCjaA2Vu99hLZH/Nfn77VYEO5+o+YImESdt7scnsGsFffuEPsTV1a3PHzavA8lPtAakVjGxfL+v+bgKW+fj2Fdf2rUeivQFckJDiIvKzFncvVhAMWWRiyOrB0oWrtoAVNIT4BCzDvu1Qd+t46+tOdYsELMOjbT5hsnWoe8Dam7m3PWABwPKTa3OxnN6rU8BqNcPWbqGgZnBelg2HQGiQiP6c9euqOJE5jPyDhEyb+t2AJLvSuAHhENJ6cAkxoczX8j6+91XcXc7vE662pTbjsY9/EBO///72F974C+DSfHv91qDXEbQc2toWouztcjmeiAZWo9HodxNCUavVuDwCMWT1on1OFtaeA8FCTGgByz3MhXObHOe63QJWZtcIPv7Qu/Ho772nvfcKiCBg+dVjeVypAFvDXThxveAHB5GYYQmL1BuGrJ75hBDAIRi4vBZSwNr7rruQufcObE3d4pB/bDsce3eMtgfnEGU47jZXcM/sGukMVkBzDtbSvwLqfwt0BCSX8Ck878p8TeA46go/OIiIxDFk9cKvB6mtjFP5AD1Inscb2Puuu/HoBx/AI++TsfU2h3AzCC7+z+ZSDW9fRfgBK2A91DLIE4iJiJKMIatngsNoYU6It2zvfdddeOxj70fugbt6extRuXkVWJkHLpaBG7/pLRgFCVqex4f4/oYAh/+IiKLBkNUTkYAkMuTndbxTeQPbUrfiMx/7u5h4+D3uzXvrLGBcdQkVhuem40GGz+vm7rd+A9x4A6j/CHjzRf9gFXbAYk9WILxqkIgoGgxZvep5TpVTee/jt6VuxfHDH8Wee3ba2lIHrn0fePP7wI2z6DqAhBZkBI7vS8Bi0LLi5eZE4WMPMQEMWT3J3L3d4QrDIAEreEBzDFhGHah/E7j2g+bwnL2+qAKS1/Fh1xN2cCOigSR6B4JB/+MglUr1uwk0ABiyerA1dcvqM7eAZPlA9wpYHT0sAQLWW2eBlX8HvL08eAFpUAMWc1bXRD8Aibol+jPWr2FukfPyYhIyccX3HozulBB5wDKMVpkvfjLfHrCunwYu/evBDFiGYCCKPWAZwPa9oDVBegQYsigOIj9n/VpOROS8HCokE0NWD0Z3SsECljVU2F/rON5oK/vI+3bh4fda/uG+dRZYeRIw6tH0HIURkGIJfIZLfYZHvSALTnynQTMyMuJbph8/t7quC5VjyCITQ1YPMqM7EChgtZW1BSzDKSi0KsIXPvEhy2a92YMVVcAKqz63IGTd73i8IdgOa2iyHw/3erfnQGtEe7IURYm4JURNoj9rcQet5eVloXIMWWRiyOpBc7gQcAwengELa8/N8q7bBh794AO4e+eWtRNf/asIApZbsAkakGzttwche0BybIdlv2s7bMd0HO9QxgCweRTUTvSDikOFFJdBvWm5pmlC5fgHCZkYsnqwZ/T29iAAtIeHngNW8+HgI5a1sN5ebi7T0BFk3Hp6fAKVPdh49RQJBSSHoOkVfvzKOLbD4Wvt+DVw2M/5WB1EP6h2794dcUuImrJZsXuLioaesIgMF6bTaf5BQi0MWT3ae/87ESxgOQQfj4A1escW7LnnjrVqr/2NS0ixnUO0p8jeLq9eINfw41TGHu6cjnFph7V9nuHQWsYjZFq/D1IGtKZWqwlPIM5kwv3acS4Yecnl/If14w5ZIudjLxZZMWT1KHPP7c0ntiE+94AFh/Ju2wYeeZ+t96Dx/bbX254H7imytcs1yNjq9Qpq1sewAlKY88d2PgxaI/ohJUlS6PNMeLNp8iLSm6XremxhXdd1oZ6sQqEQQ2soKRiyerT3gTsdApLledcBq2nUOherdZscpwBinku0p8gpYLk9OgUsr4AkWq/LcUHr8Tve/DptHuWcLBvRkCU6fBOE6CRiWp9EerIA4NSpUxG3pKlSqfiWSafTnPRObRiyetS8whAQC1i2sAJ4BiwYBjL3WoYK3172CCBBe4osj35BKEggChKwggSkXtsFADsfAa3RdR3ValWo7L59+wLVLfJBE/dQDyVLKpVCPp/3LaeqagytETvPgQMHYmgJJQlDVo/u3inZhgy9AhbWnrfKW16zBSxrbQCAt36NyAJIPwJWWO0TDWrvHAOtEe0BSKfTgedjiax4LRrwaP0aHx/3LdNoNCIPWpqm+Q5LSpIkFAppfWHICkH7kCHaP/ix+ugXsGy9XYa1LNBZNuwA4lVPPwNWWO3bPAps2QNqqtfrmJ+fFyrbzV/nIldX1ev12HohBgWHSINJp9NCw4blcjnSexmWy2XfMoVCgfcrpA4MWSF49MH71jbsw3/2gGWdjO7S2+UcsNB5TFgBxOt40aAWVcAKq32jn7R/Ide1UqkkNPG827/ORa+wivrDMU4i71l0xXBaMzEx4VtG13XhPxqC0jQNi4uLnmXS6TTGxthTTp0YskKw554dzQnqrgHLQCtgtQgErLby1qpDDiBxDTlG1TMmUs+dyfoFqKpqZOFDVVXhobqJiYmu/joXnbSs6zpmZ2cD1x+EpmlCk5Z7JfJ14rIVwaXTaaFhw7m5udC/vvV6HTMzM77lDh48GOp5aXgwZIXkMx997+ozh4Bjbre4BSzDpby16ggCiF89YQS1fk6ef+fHgXdsRZKoqorHH3889OG0Wq2GUqkkVFaW5a7nmIhOWgaa71W0TUHouo5SqYTp6elYwo0sy75z0er1OueidWFsbEzoYoonnngitD9O6vU6pqenfXt8C4VCJFff0nBgyArJox+4D6N3rP6C9byC0Ctgwfn4tRfCDyCiASmMQOTZDoevTWufU32GeL27P4skajQaKJVKoYUtVVVx9OhR4fLFYrGn84n0PphUVcX09HQow2n1eh3lchlHjx6Nfc6XyIdtVMNaw65YLPqG2EajEcrPUb1eR6lU8g3nsiwH+jmn9YchK0RTEw/5BCy0hwihgOUQtKzlegogovWZ5Q2XegSCkGEr3xGw4NAeA2tfBpf9XkHNMJrDhAlfG8vskfnc5z6Hcrkc+ANE13U88cQTgXqLisViz+v9iA7zmDRNw9GjR7t6j+bxpVIJn//85zE3N9eXuV4iS11omoa5ubkYWjNcZFkWCv61Wg1f/vKXu14iRNM0TE9P+/Y4SpKEYrHIye7kaVO/GzBMcg/ciUc/eD9O/uTF5o5eA5bTkKF1v2uwaRV0DzL2/V71mNs9He/WDof36hjmHPY71mPZ3rQNuG8Sw6LRaGBubg5zc3OQZRmZTAaKomD37t1tV/PV63XUajXUajWoqhp4qCyfz4d2KfrY2Bg0TRP+wKvX6633mM1moSgKZFl2HIrTNA26rkPTNFSr1YGYQJ/JZJDL5XzngJXLZdRqNXz6058WWu6CmrLZLIrFou8fDGaPViaTwfj4uNBFCZVKRXi+oiRJmJyc5MKj5IshK2Rf+MQHcOb181h89fzqHoGAZZ+v1bHP+rJPEBIKILb9IvW2lbHXGyAgdZwr4PGe78/2+K5/CWxK1lwsUWaIWlhYCLXefD7f8zCh3eHDh/HEE08EDnvVajWR85eKxSI0TfMNfZVKBZVKBfl8HtlstiMskzPzDwCRntnFxUVMT0+3VmJ3CkXmGliit3liwKIgGLJCtvW2W3D80EdxaOY7WHxtdcjDIcyIBSxb0OopYLns96rH/tjRBqf31mXACnt4c/STQPrDSCpFUWJfET2KgAU0J8EfOXIEMzMz62KV91QqhcnJSUxPTwv1rqmq2jZ3LJ1OI5vN8oo1D/l8HpIkoVQqCX2NzfsO9hrazSFLBiwSxTlZEdh62y04fvgADj78nmABy4BD2LBxnM/kFEBiDFiGQzuc2hdXwLrvnwH3J3uYcHx8HFNTU8LrTfXq4MGDkQQskxk84r55rrnO17Fjx2I9ryzLmJyc7KpnStd1vPrqqxG0arhks1lMTU3FFngKhUKs56PhwJ6siGy97Vb80098EI+8bzee/HYVp88swYxYzQdbb5U1RNhDRZseA0iQQBOk3kGo5/YHAfmzzcchYH5QLy4uolwuR9ILpCgKJiYmYvvgmJiYQC6Xwze+8Y1IF+bM5XLIZrPI5XJ9m5gsyzK+9KUv4emnn153K9vHJZ1OY2pqCqqqYnZ2NpJ5eXH/G6HhwpAVsdwDd+H44Y/h3Pkr+L8/P4ufvrCElfp1nHlNx0rjzWahMAJW2EEmquAW5vHb964+Pgjc8WFgS7D76yVFJpPB5OQkarUa5ufnQ5nkrShKqBPcg8hkMjh27BhUVe36SkK7dDoNRVGgKErXwSqK+VCpVArFYhHj4+Mol8sDM0F/2OTz+dYFB/Pz86Gsi5bP57Fv377A9+0kstpgGG4zrGngXP5vwOW/jidg7f5zQHpftO9nnZqenvbtlTpy5IjnL/dqtdq6ak/0A0WW5VYPzyD9VW69ClKkt05RFEiS1JrILMuyUEB67LHHPF/3+5qHoV7rvpUAAArWSURBVNFotL5nmqZheXnZMWQqioLJSbEhb5FJ27Isx9KjNyhtMedfaZqGs2fPCgV5RVFa90pUFCXyNg7K1wqA722DADBsdok9WUkT55AcDaxsNtu28KX5S7JWq7V6StLpNEZGRpBKpQYqVNnJstxxfzr7L/1ef8GLfIjEIZVKtb53Yd3rbpC+t4PSlnQ6jf3792P//v2tfW4/A+l0ui9XdQ7K1wpggIoSQ1bixBWwGLSSxPwlOSy/LIflfdDg4M8U9QNDVqLEMCfLLPebrwEbpLXybfU4tKdtG871wna8Wd+7/W/AShQ1rtxNRGFjyEqSOIcKGy/0Xk+gdhH11yAN3xDRcGDISprQgpa1VynMoGart3WctZfLtp+IiGgIMWQlThgByeV4h4VTXQOSYz1dBCxmLIrB8vKy5+vsxSKiKDBkJUoYAckevoIe79YOh+E/x1XgHfYTRczvEn7epJmIosCQlSQdvUGr/wsrYAUJSB3ncnhkwKIBwZ4sIuoHhqykcQ1YHkEmyLCi6/GW/V7Hd7t6O1GE/HqyRkZGYmoJEa0nDFmJ4hdo4BKQBANWL7fH2ZYD3vlHwI6/39z35hKg/2/gta/7H08UMb+V5NmTRURRYMhKmkG4D6G9fPofAH/nX7S3c/MocM+fNMPXLw/710MUkWq16luGC1USURQ29rsBFEBbb9XqjrgDlmErf+vdwK7Pubd5217g3j9hwKK+qVQqnq8rihJTS4hovWHISpp+Byx7fXf+EfCOrd5tvnuisx7z+FtHxd43URfq9bpvT1Yul4upNUS03jBkJcnGLc1Ho48By96Tldrj3+53bGv2aDm16zaGLIrOiRMnWjfMdmO90TYRUZg4JytJbr2v+x6nsAJW10N9LvX49YIRdUlVVd+hwnw+j3Q6HVOLiGi9YU9WkqTe23wU7cmKOmAZBlBf9G/3WyvApdPO9Wz/gOCbJxKnqipKpZJvufHx8RhaQ0TrFUNW0mzbv/okpJ4sz3oM//rOzfq3eenpznrN49MfFnjTROLK5bJwwGIvFhFFicOFSbPjD4BLz6xuWMKKY0Ayi3UbsOAQsIzWJgwDuH4OeOkrwP1fdG7v1UXg1f/o3K47x5pLPRCFQNM0zM7Oolar+ZZVFAVjY2MxtIqI1jOGrKTZfB+w8w+AC9/qImDZAhJs5TsClr0eh+MNA1g+Cbz5OnD3QWDnI839by4Bb8wBrz7pXO+mbcDuz/b0pSACmuFqbm7Od8FRkyzLOHz4cMStIiJiyEqm9D8Crv4MePOl3gJSVwHLXs/q9uXTzf/c6rE/3j/JXizqmqZpqFQqqFarvrfMsZJlGUeOHEEqlYqwdURETQxZSbRxC7D7z4Gzfwpce7G3gGQt3/PaWS7tsD9mvtwcKiQSoGkadF3H2bNnUavVsLgocLGFg3w+j4MHDzJgEVFsGLKSygxar08DK2qAgISIApbA46ZtzR4sBixyYfZQ1Wo16LoeqJfKjSRJKBaLXA+LiGLHkJVkG7cAu74EnP8m8Nv/1FwqAQg/IIURsG7/QDNgbeE94shdo9HAwsJCaPUVCgWMj4+z94qI+oIhaxjc8YfA7R8Fzh0HLvxNc19YAanXoLZ5tDnBnb1XJCCM+whKkoR8Po9CocAlGoiorxiyhsU7tgD3HgHu/ONm0Fr+78DbK9H3ZLnVc/uDwOinuA6Wg0KhAEmSfFcjX49SqRRkWRZahsFOlmUUCgXkcjn2XBHRQGDIGja33NUMWnf+MXD5FHDpB83/nAIXEG7Auv1BYOeHm8GKVw66ymazyGazaDQaUFUVp06d6ipUDCtFUYS+HpIkQVEUKIqCbDbLXisiGjgbDCPwTegoiRovAlcqwEoVaCwCb55DT0HrHdsAaQ+w/cFmuNq+N653MpR0XW8FLl3XceTIEWQy63P+WrVaxczMTNu+dDqNkZERyLKMkZERZDIZyLLcpxYSEYlhyFqv3r4KNM40Fw29vtQMTyunW7nLcikikMoAm7auBavNo+ypilCtVoMkSeu2Z6bRaKBWq7WGDomIkoohi4iIiCgCvEE0ERERUQQYsoiIiIgiwKsL14PVEeG4x4U3AMCGDTGflYiIaDAwZCWdYYiFp5iD1gbBczGIERHRsGLISgqvMCUQtOK+vsHAaoDysAGAsWGDZakI2+sMX0RElGAMWQPKNRS5BCq38l7hKszg5RSImktqGa6vu9bVPKCjfez1IiKiJOESDoPCKTwJBiqnb6HoPq/9IrzCk9Nr9n0d282dvvv8zk1ERNRvDFn9JBisvEKVX+Bq2/YZcgTE52z59Sp5hSnfoGUt63Aex30MXERENGAYsvqg40vuE6xEQ1brub0+27ZX3d3oOkAFfd7c4brtto+IiKgfGLJi5BuuBMKQb6iyPHc6xqu+bomErCCBKmj4ctxu7hR9C0RERKFjyIpDD0OA9jDkF7IMw3Cs2+18YYasIAGr29c8nzd3OLaBiIgobgxZUfPprXLqebI+FwlcbmX9tu3HOG27Ee2Bsu9z27YGpCBBzP5cZJuIiCgODFkRE52IHiRM2feJhqsgocz+utuVgm4BSDRc2bf9Hv32AezRIiKiwcB1sqLkMAerbdPxEPf1sexl/AKVSNjy2ufGDEWGYbTCy8aNGzvOZy1nHmc9lzX4tOoyjNYaWRscHu1fq9a+1eOA1YVQLdtERET9wJAVoY55WG7lBCamWye2u9XhtQ6WSMC6efOmaxkzMNlDkxl0bt68iY0b3e837hSsrK9tsAYk11rc+R7H0EVERDFjyIqQ/f59bvfzswYX+z77I1xuQ2PvJXJ7zd4rZN1n743yGyK0vm4PWE7zotyG7DqG+rrQcZz9XAxYREQUM4asKNkDkW3bKXQ5BS57eaegZB5rblt7nZyG7qznM928eVN47pLbfCy314TnXAnMyXI6JzyCGuMVERH1Aye+R81+NSGCTX63Pu+YsG64L90gcjVht1cYii6tEORqQ5GlHLiMAxERJQlDVkz8goxowHLc5xDUgoSpXn4E/JZS8NsnEq5cyzU31vb7bBMREcWJIStO9l4tn16uboKXSFm/Y4LwClnWfa7BSHCJBq9zsfeKiIgGEUNWP/gNIfpsB33ezbYoz56s5k7HbZGhv6D1O5UhIiLqF4asPuv48jsEMPu+bgOZ1z77+Tz5BBmvoGTfDlIWcAlWAm0iIiKKG0PWAHH8VgiELrdjgwasID8Kfj1GvlcDuuxzLNN8wXcfERHRIGHIGlRO4cprP9xDkt+3OKyJ70HKuIUkr/DEoUAiIkoShqwk8QhYnq8FKRMSv56m1itugcrneCIiokHHkDUMRMOTeaVhhE3xC08d5RmkiIhoSHHF92GwYYPwqubd3hswiKBBi4iIaBgxZK0nAcIYERER9WajfxEiIiIiCoohi4iIiCgCDFlEREREEWDIIiIiIooAQxYRERFRBBiyiIiIiCLAkEVEREQUAYYsIiIioggwZBERERFFgCGLiIiIKAIMWUREREQRYMgiIiIiigBDFhEREVEEGLKIiIiIIsCQRURERBQBhiwiIiKiCDBkEREREUWAIYuIiIgoAgxZRERERBFgyCIiIiKKAEMWERERUQQYsoiIiIgiwJBFREREFAGGLCIiIqIIMGQRERERRYAhi4iIiCgCDFlEREREEWDIIiIiIooAQxYRERFRBBiyiIiIiCLw/wHFhXehSRmsyQAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, - "execution_count": 5, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -74,97 +59,70 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ - "## Install Python and JupyterLab\n", + "## Organize your notebooks\n", "\n", - "[Install Anaconda](https://www.anaconda.com/distribution/#download-section) which includes Python 3 and JupyterLab.\n", - "\n", - "Alternatively, install JupyterLab with `pip3 install jupyterlab`." + "Place the notebooks that you would like to publish in a `notebooks` folder at the root of your website." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ - "## Create or upload a Jupyter notebook\n", + "## Import the notebooks into your site\n", "\n", - "Run the following commands in your Terminal, substituting `` and `` with the file path to your Academic website folder and a short title for your blog post (use hyphens instead of spaces), respectively:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ "```bash\n", - "mkdir -p /content/post//\n", - "cd /content/post//\n", - "jupyter lab index.ipynb\n", + "pipx install academic\n", + "academic import 'notebooks/**.ipynb' content/post/ --verbose\n", "```" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ - "The `jupyter` command above will launch the JupyterLab editor, allowing us to add Academic metadata and write the content." + "The notebooks will be published to the folder you specify above. In this case, they will be published to your `content/post/` folder." ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Edit your post metadata\n", - "\n", - "The first cell of your Jupter notebook will contain your post metadata ([front matter](https://sourcethemes.com/academic/docs/front-matter/)).\n", - "\n", - "In Jupter, choose _Markdown_ as the type of the first cell and wrap your Academic metadata in three dashes, indicating that it is YAML front matter: \n", - "\n", - "```\n", - "---\n", - "title: My post's title\n", - "date: 2019-09-01\n", - "\n", - "# Put any other Academic metadata here...\n", - "---\n", - "```\n", - "\n", - "Edit the metadata of your post, using the [documentation](https://sourcethemes.com/academic/docs/managing-content) as a guide to the available options.\n", - "\n", - "To set a [featured image](https://sourcethemes.com/academic/docs/managing-content/#featured-image), place an image named `featured` into your post's folder.\n", - "\n", - "For other tips, such as using math, see the guide on [writing content with Academic](https://wowchemy.com/docs/content/writing-markdown-latex/). " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convert notebook to Markdown" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```bash\n", - "jupyter nbconvert index.ipynb --to markdown --NbConvertApp.output_files_dir=.\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example\n", - "\n", - "This post was created with Jupyter. The orginal files can be found at https://github.com/gcushen/hugo-academic/tree/master/exampleSite/content/post/jupyter" - ] + "cell_type": "code", + "execution_count": null, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [] } ], "metadata": { + "front_matter": { + "summary": "Easily blog from Jupyter notebooks!" + }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -178,7 +136,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.11.5" } }, "nbformat": 4,