Как сделать вывод кода JTypper nbconvert LaTeX более мелким шрифтом? - PullRequest
0 голосов
/ 09 октября 2019

PYTHON Book Builder

Я пытаюсь сделать книгу из нескольких тетрадей, но неважно, что я делаю, код все равно оказывается завернутым, потому что он переполняется.

Iпопробовал:

  • Убедиться, что мои блокноты не превышают 70 столбцов для кода.
  • В шаблоне латекса я сделал:
    • Использование extsizes латексупакуйте и используйте наименьший доступный размер pont:
\documentclass[8pt, preprint, floatfix, groupaddress]{extbook}
\usepackage{extsizes}
  • Попробуйте использовать бумагу большего размера и уменьшите поля:
\usepackage[a5paper, margin=0.5in, inner=0.5in]{geometry}
  • Максимально уменьшайте поля, не затрагивая нижние и нижние колонтитулы:
\usepackage{geometry}
\geometry{verbose,tmargin=0.6in,bmargin=0.6in,lmargin=0.5in,rmargin=0.5in}

Однако этого все же недостаточно для достижения эффекта, который я ищу, я неуверен, как еще больше уменьшить размер входных и выходных кодовых блоков или какой блок I следует расширить или перезаписать, чтобы добиться этого.

Пример вывода: Python_Book.pdf

Это мои текущие настройки.

Зависимости сборки

Убедитесь, что выУ вас установлены следующие не-Python-зависимости:

  1. pandoc
  2. texlive
  3. bibtex

Установкаэти 3 зависимости должны автоматически получать множество других подчиненных зависимостей.

Setup

Создайте виртуальную среду с зависимостями сборки Python, затем запустите процесс сборки книги:

  1. Запустите setup.sh в корневом каталоге хранилища.
  2. Запустите make_book.sh из каталога book_dir.

Структура Dir

`root_dir`
|--- A bunch of `.ipynb` files, order preserved by `ls` sorting
|--- `setup.sh` for environment setup
|--- `requirements.txt` needed for setup
|--- `book_dir`           
    |--- `make_book.sh` build script
    |--- `Python_Book.tplx` latex template
    |--- `execute_all_cells.py` execute preprocessor

Требования Python

  • requirements.txt:
cite2c
flask
jupyter
jupyterlab
jupyter_contrib_nbextensions
nbmerge
nbformat
nbconvert

Сценарий установки

  • setup.sh:
#!/bin/bash

echo "Starting setup..."

if [ ! -d Python_Book_env ]; then
    echo "Installing virtual environment..."
    python -m venv Python_Book_env
fi

echo "Activating virtual environment..."
source Python_Book_env/bin/activate

echo "Installing Python dependencies..."
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

echo "Installing extra notebook extensions..."
jupyter contrib nbextension install --user
python3 -m cite2c.install

echo "Setup finished!"
deactivate

Сценарий сборки

  • make_book.sh:
#!/bin/bash

BOOK="Python_Book"
echo "Starting $BOOK build..."

NOTEBOOKS=`ls ../*.ipynb`

source ../virtual_env/bin/activate          

echo "Reseting assets..."
reset_assets () {
    rm -rf ../assets/files/*
    echo "Example file." > ../assets/files/example_file.txt
}
reset_assets

for NOTEBOOK in $NOTEBOOKS; do
    echo "Executing: $NOTEBOOK..."
    python execute_all_cells.py "$NOTEBOOK"
done

echo "Merging notebooks..."
nbmerge $NOTEBOOKS > "$BOOK.ipynb"

echo "Clearing notebooks..."
jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace $NOTEBOOKS

echo "Generating LaTeX..."
jupyter nbconvert --to=latex --template="$BOOK.tplx" "$BOOK.ipynb" --no-prompt

echo "Patching LaTeX..."
sed -i -e 's/assets\/images/..\/assets\/images/g' "$BOOK.tex"  # fix images path 
# sed -i -e 's/\\section/\\chapter/g' "$BOOK.tex"  # contents start at 0.1 :(
sed -i -e 's/\\maketitle/\\maketitle \\tableofcontents/g' "$BOOK.tex"  # add table of contents
sed -i -e 's/\\includegraphics{/\\includegraphics[width=5cm]{/g' "$BOOK.tex" # adjust graphics size

echo "Generating Python Book pdf... Fingers crossed: ლↂ‿‿ↂლ"  # 
pdflatex -interaction nonstopmode -halt-on-error -file-line-error "$BOOK.tex"
bibtex "$BOOK.tex"
pdflatex -interaction nonstopmode -halt-on-error -file-line-error "$BOOK.tex"
pdflatex -interaction nonstopmode -halt-on-error -file-line-error "$BOOK.tex"

echo "Cleaning build dir..."
rm *.bbl 
rm *.aux 
rm *.blg 
rm *.log 
rm *.out 
rm *.bib 
rm *.toc 

reset_assets

echo "Book build finished!"
deactivate

Выполнить препроцессор

  • execute_all_cells.py:
from sys import argv 

import nbformat
from nbconvert.preprocessors import ExecutePreprocessor, CellExecutionError


ep = ExecutePreprocessor(timeout=600, kernel_name='python3', allow_errors=True)

with open(argv[1]) as f:
    nb = nbformat.read(f,  as_version=4)
    ep.preprocess(nb, {'metadata': {'path': '..'}})

with open(argv[1], 'w', encoding='utf-8') as f:
    nbformat.write(nb, f)

Шаблон LaTeX

  • Python_Book.tplx:
((*- extends 'style_jupyter.tplx' -*))

((* block docclass *))
    \documentclass[8pt, preprint, floatfix, groupaddress]{extbook}

    \usepackage{extsizes}
    % Use a wider inner margin for the two-sided book
    \usepackage[a5paper, margin=0.5in, inner=0.5in]{geometry}

    \usepackage{geometry}
    \geometry{verbose,tmargin=0.6in,bmargin=0.6in,lmargin=0.5in,rmargin=0.5in}

    % Ignore future geometry commands with optional and mandatory arguments
    \usepackage{xparse}
    \RenewDocumentCommand{\geometry}{om}{}

    % Let all figures float 'H'ere
    \usepackage{float}
    \floatplacement{figure}{H}
((* endblock docclass *))

% Authors and Title
((* block maketitle *))
    \author{D Author}
    \title{Python Book}
    \date{2019\\October}
    \maketitle
((* endblock maketitle *))

Мысли

Я использовал толькоИндекс и введение Вихрь Tнаш Python в качестве примеров.

При такой настройке я получаю почти то, что хочу, но для меня код Python выглядит слишком большим, на мой вкус, и часть кода оказывается завернутой.

Я очень стараюсь не превышать 70 столбцов в ячейках кода для моих ноутбуков, но это не всегда возможно, например, если я получаю ноутбуки в другом месте.

Другие проблемы

Unicode

Я не могу поставить любые символы Unicode, поэтому многие ноутбуки с любым из них пока не будут работать.

Я использовал только индекс и введение Whirlwind Tour of Python в качестве примеров, но если вы попробуете всю книгу, она будет жаловаться на .

./Python_Book.tex:1792: Package inputenc Error: Unicode character ■ (U+25A0)
(inputenc)                not set up for use with LaTeX.

See the inputenc package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.1792 ...that is, for any operator ``\texttt{■}
                                                  '', the expression
./Python_Book.tex:1792:  ==> Fatal error occurred, no output PDF file produced!

Я попробовал inputenc, я должен был сделатьчто-то не так, но это для другого вопроса, это здесь на всякий случай, если вы попытаетесь запустить это и получить эти ошибки.

Конечно, есть больше проблем для большего количества вопросов, но они не влияют на конвейер тольковывод, некоторые, вероятно, болееУместно на сайте LaTeX Exchange.

С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...