Jupyter notebook with bibtex citations - ipython

I have a .ipynb file containing markdown text. I have a bibtex file called library.bib with all my references. I wish to cite one of these references in the Markdown cell.
I've found information on how to render this when I do nbconvert, but how can I have the references in my browser window in the raw ipynb format?

Have a look at https://github.com/takluyver/cite2c witch is a notebook extension.

The Calico Document Tools extensions supposedly offers BibTeX support. For Jupyter 4.x seems to need adaptations. See section Notebook Extension Structure from README in the ipython-contrib/IPython-notebook-extensions repository on github.

Related

Does VS Code install some extensions automatically?

I noticed that I have many extensions installed that I don't recall manually installing, e.g. isort, jupiter cell tags, etc.
I only installed the "python" and "jupyter notebooks" extensions myself. Those others seem to be installed later without my knowledge.
Does VS Code install extensions automatically somehow?
To answer the general question
Yes, VS Code does come with some extensions installed "out-of-box". It calls those extensions "Built-In" extensions. If you open the extension page of one of those extensions, it will say:
Notice: This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
One example of this is the vscode.typescript-language-features extension. You can get a list of all running with the Developer: Show Running Extensions command. It's kind of hard to find them otherwise, since they don't normally show up in the extensions sidebar.
In your particular case, you misunderstood something
The Python and Jupyter extensions you installed are extension packs. They include isort and Jupyter Cell Tags (as well as others).
You can see for yourself.
https://marketplace.visualstudio.com/items?itemName=ms-python.python:
The Python extension will automatically install the Pylance, Jupyter and isort extensions to give you the best experience when working with Python files and Jupyter notebooks.
https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter:
The Jupyter Extension will automatically install the following extensions by default to provide enhanced Jupyter notebook experiences in VS Code.
Jupyter Keymap - to provide Jupyter-consistent keymaps
Jupyter Notebook Renderers - to provide renderers for MIME types such as latex, plotly, vega, etc.
Jupyter Cell Tags and Jupyter Slide Show - to provide the ability to tag cells in notebooks and support for presentations

Adding tags to Jupyter notebooks

As suggested in the description of the Jupyter Miscrosoft extension for Visual Studio Code (VSC), I come here to ask you about support for cell metadata in jupyter notebooks. It seems nothing is currently available for adding cell metadata and, thus, using the papermill extension when writing python notebooks with VSC.
The last message in this 2019 github discussion, dated 2021-05-28, points to this other discussion where on 2021-05-13 someone suggested to use the Jupyter Powertools extension.
However, as of today 2021-10-03, that extension seems not to be compatible with either of my VSC versions:
VSC 1.60.2
VSC Insiders: 1.61.0
with no updates available for either one of them (using Windows 10).
Is there any way to use papermill with VSC? If not, are you aware of any papermill alternatives for parameterizing notebooks while using VSC?
Thanks
I find extension Jupyter Power Tools that can add tag by click icon tag+ left beside icon python. But it failed in vscode version 1.660
Update - Jupyter Power Tools is now deprecated and functionality to be included within MSFT's Jupyter PowerToys extension. A tags interface / cell metadata editor does not appear to have been included, but they have an open issue here.

Link to files in VSCode .ipynb notebooks

I'm trying to put a link to a file in a markdown cell in a notebook, for example:
See [feature scaling notes](feature_scaling_notes.md)
The file feature_scaling_notes.md is in the same folder as the .ipynb file.
A link is created, yet when I click on it, instead of opening the file, a browser window is opened with the address:
https://file+.vscode-resource.vscode-webview.net/...(file path)
How can I make the file open in the correct way?
Thanks.
Coming in v1.63 are file links in notebooks, see release note: file links in notebooks.
Markdown inside notebooks can now link to other files in the current
workspace
Links the start with / are resolved relative to the workspace root.
Links that start with ./ or just start with a filename are resolved
relative to the current notebook.
[link text](./cat.gif)
Bare http(s) links notebooks
In addition, markdown text that looks like an http and https is
now automatically turned into a link:

VSCode: How to export a python file that was imported from a Jupyter Notebook back to Jupyter format?

Probably a silly question, but I couldn't find it. Visual Studio Code editor has a really nice way to work with Jupyter Notebooks. I can edit the cells directly in vscode and run them. Now it would be easy to work with version control.
But I couldn't find a way to convert it back to a Notebook! How do I generate a notebook back from the generated python file?
I understand that the notebook wouldn't have the output cells in it.
There is an option in the interactive Python window that has the notebook output:
This is really cool, now you can work in a Python file and have a really nice interface with your version configuration system (Git).
Yes, it was a silly question :-)
The Jupytext library supports the percent-based cell format used by VSCode-Python, as well as other text-based notebook interchange formats:
https://github.com/mwouts/jupytext
If you need more control over how conversion to ipynb is done (or you need to have cross-references) then you can give a try to Pandoctools. It can export VSCode *.py documents to any Pandoc output format or to Jupyter notebook.
For example you can create and register Jupyter kernel. For example is can be named "nn". That should be the same kernel that you selected in VSCode (there you select it by path but VSCode still uses installed kernels specs under the hood). Then add hat to the Python file, split document to cells, provide settings and set Markdown cells (commented metadata line would export to pdf instead of ipynb; I recommend to open ipynb in nteract native app):
"""
---
kernels-map:
py: nn
jupyter:
kernelspec:
display_name: nn
language: python
name: nn
pandoctools:
# out: "*.pdf"
out: "*.ipynb"
...
# Markdown section title 1
Some **static** Markdown text.
"""
# %% {echo=False}
import IPython.display as ds
import math
import sugartex as stex
# %% {markdown}
"""
# Markdown section title 2
The quick brown Fox jumps over the lazy dog.
"""
# %%
ds.Markdown(stex.pre(f'''
Some **dynamic** Markdown text with SugarTeX formula: ˎα^˱{math.pi:1.3f}˲ˎ.
It works because of the `Markdown` display option and `sugartex` Pandoc filter.
Acually `stex.pre` is redundant here but it is needed when the text is imported
or read from somewhere instead of being written in the same document.
'''))
Then convert the file via pandoctools: drag and drop file to pandoctools shortcut/executable or "open with" pandoctools executable.
Also see:
Two introduction articles are at the beginning of this README,
examples of input to output conversion that have cross-references!
how to use Pandoctools and it's CLI,
how to use Knitty that collects Jupyter outputs and change it's settings.
Use jupytext library:
Install:
pip install jupytext
Now open CMD or internal terminal to the folder with your .py file
Run this:
jupytext --set-formats py:percent,ipynb filename.ipynb

Convert ipynb to pdf in Jupyter

I am new to ipython notebook, and I would like to convert my ipynb to pdf. But I get the following error when I try to Download as PDF via LaTex.
nbconvert failed: pdflatex not found on PATH
There is no documentation anywhere how to add pdflatex to my PATH. I use windows. Thank you!
A simple and surprisingly good solution is to print the notebook to pdf through the browser with ctrl+p. Just make sure your plots and figures are not on interactive mode otherwise they will not be displayed (set them to %matplotlib inline).
Exporting jupyter notebooks through latex is quite troublesome and takes a lot of tinkering to get something remotely close to publish ready. When I absolutely need publication quality I do it on a latex editor, but this tutorial goes in great length about doing it on jupyter.
A few useful tips to get better results:
Higher resolution plots
Hide your code-cells from the pdf
Take a look at these extensions to improve your jupyter documents
For Mac OS X, the solution for me was to install MacTex first and then export the path to find it:
### TeX
export PATH="/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/texbin:$PATH"
You can add this to your .bash_profile or similar config file to load it every time.
See more here https://github.com/jupyter/nbconvert/issues/406
As said by Thomas K in the comments, you need to have Latex installed, and after add the path to the directory containing pdflatex.exe file to the PATH variable of your system.
I have looked for a lightweight distribution and tried installing TeXworks, but I didn't find any pdflatex.exe file.
So I have tried TeX Live, which worked fine creating the pdflatex.exe file under the target installation directory. This path should be like C:\...\texlive\2016\bin\win32.
Finally, you should just add this path to the PATH environment variable of your system (you can use the link shared by Thomas K).
As said here, you need to quit jupyter notebook and open a new command prompt after making any path changes, in order for jupyter to find the newly added item to the PATH.
Then, in Jupyter, you can check your environment variables by running the following (refer to this link for details):
import os
os.environ['PATH'].split(';')
and check if it contains the path to pdflatex.exe file.
If you get some trouble when exporting your notebook to pdf due to missing files/packages (this happened to me), refer to this link to search and install them under TeX Live.
For Linux, the reported error is due to the lack of XeLatex, part of the texlive-xetex package.
Installation in ubuntu will be:
sudo apt install texlive-xetex
Instead of using nbconvert what you can do is :
Download your ipynb file as HTML from File option.
Right-click and select print or use Ctrl+P.
Save as PDF
Easy.
Here is the full solution that worked for me (for Mac).
brew cask install mactex
$ cd ~/
$ touch .bash_profile
This will open the bash profile on TextEditor
$ open -e .bash_profile
Paste the following to the top and save
export PATH="/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/texbin:$PATH"
Close any notebook you have and reopen it
Here is the notebook explaining it step by step:
https://github.com/ybaktir/notes/blob/master/Convert%20Jupyter%20Notebook%20to%20Pdf.ipynb
I agree that latex installation (at least on windows) is painful and the result in my case was not a great looking document. The ctrl-p method alone doesn't work great if you're running in JupyterLab, but if you export the notebook to HTML, then print from the browser, choosing PDF, the result is quite good.
I know my solution is not at a level. But it works !!
in your browser of notebook tab, simply do "ctrl + p" to get download in pdf
First export the notebook file to HTML (available through File> Download as..).
If you are using JupyterLab, then this is available under File > Export Notebook As....
Use (any) free online converters to convert html file to a pdf file. (One such free online converter is sejda (https://www.sejda.com/html-to-pdf)
Note, there are many such converters are available online.