(Jupyter Notebook) nbconvert PDF через пользовательский формат даты и заголовка LaTeX

Я использую Jupyter Notebook для написания отчетов, очень сложных в коде и LaTeX. Я хочу изменить их название, дату и формат. Точнее, я хотел бы, чтобы весь текст был меньшего размера, от 12 до 14 пикселей в наибольшем размере.

Я провел несколько дней, безуспешно пытаясь создать собственные файлы *.tplx для nbconvert. Независимо от того, какой файл я использую, название и дата остаются неизменными. На самом деле ничего не меняется, когда я использую собственный .tplx.

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

Какие-либо предложения?


person Tyler    schedule 17.01.2018    source источник


Ответы (2)


Хорошо, я собрал некоторый код, который выполнял эту часть даты. (Огромную помощь оказал этот блог.) изменить название и/или автора. Я не уверен, насколько это надежно, но это сработало.

По сути, вам нужно будет отредактировать файлы tplx в вашем каталоге /nbconvert/templates/latex. В частности, я редактировал base.tplx. Где это было

 ((* block date *))((* endblock date *))

я изменил это на

    ((* block date *))  
    ((*- if nb.metadata["latex_metadata"]: -*))  
    ((*- if nb.metadata["latex_metadata"]["date"]: -*))  
        \date{((( nb.metadata["latex_metadata"]["date"] )))}  
    ((*- endif *))  
    ((*- endif *))  
    ((* endblock date *))  

Затем в метаданных записной книжки я добавил

  "latex_metadata": {  
      "date": "CUSTOM DATE HERE"  
  },  

, в самом конце зависит от того, является ли это последней строкой в ​​вашей структуре метаданных. Если тег latex_metadata не существует, он оставляет дату пустой, а латекс заменяет текущую дату.

Единственная проблема, которую я не смог исправить, заключается в том, что когда я запускаю Download as -> PDF через LaTeX, он всегда не перезапускает генератор LaTeX (иногда он просто дает мне ПОСЛЕДНИЙ PDF-файл). созданный, а не новый.) Я не могу понять, почему он иногда запускает его, а иногда нет.

*Изменить* Мой точный раздел метаданных в блокноте Jupyter теперь выглядит так (я использую поле даты, чтобы показать дату выполнения для моих учеников):

{
  "anaconda-cloud": {},
  "kernelspec": {
    "name": "python3",
    "display_name": "Python 3",
    "language": "python"
  },
  "language_info": {
    "name": "python",
    "version": "3.7.9",
    "mimetype": "text/x-python",
    "codemirror_mode": {
      "name": "ipython",
      "version": 3
    },
    "pygments_lexer": "ipython3",
    "nbconvert_exporter": "python",
    "file_extension": ".py"
  },
  "latex_metadata": {
    "date": "Due April 7 at 11:59pm"
  }
}
person Seth    schedule 12.02.2018
comment
Для тех, кто может наткнуться на этот ответ... после обновления nbconvert в какой-то момент я обнаружил, что он больше не использует base.tplx. Теперь он использует base.tex.j2, расположенный (для меня) в share/jupyter/nbconvert/templates/latex под вашей установкой anaconda. Однако то же решение, что и выше, все еще работает. - person Seth; 18.01.2021
comment
Этот хак все еще работает для вас? Целый день искали, как заставить это работать, следуя тому, что вы перечислили здесь, и это все еще не играет в мяч: -/ - person microhaus; 05.04.2021
comment
Да, после обновления до изменения base.tex.j2 вместо устаревшего base.tplx работает без нареканий. (На самом деле, самая последняя строка моего исходного сообщения о том, что генератор LaTeX не перезапускается, больше не является проблемой, поскольку он каждый раз работает идеально.) - person Seth; 06.04.2021
comment
Не могли бы вы отредактировать свой ответ и опубликовать, как выглядят ваши метаданные Jupyter в новом блокноте после того, как у вас есть фрагмент? Я внимательно следил за вашим сообщением, и это не сработало, поэтому в настоящее время я подозреваю, что, возможно, допустил ошибку с синтаксисом .json, с которым я неграмотен. В противном случае я предполагаю, что это может быть связано с некоторыми особенностями моей установки. В настоящее время я использую сохранение Jupyter как .tex с последующим ручным редактированием, что не идеально. - person microhaus; 06.04.2021
comment
Хорошо, теперь обновлено, чтобы показать метаданные. - person Seth; 07.04.2021
comment
Спасибо, что нашли время отредактировать свой ответ, это очень ценно. Я дам ему еще один шанс. - person microhaus; 07.04.2021

Спасибо за полезный вклад. Ту же операцию можно выполнить для настройки названия и автора. Я отредактировал нужную часть в base.tex.j2, как показано ниже, и добавил соответствующие поля в метаданные под полем даты.

((* block title -*))
((*- if nb.metadata["latex_metadata"]: -*))  
((*- if nb.metadata["latex_metadata"]["title"]: -*))  
    \title{((( nb.metadata["latex_metadata"]["title"] )))}  
((*- endif *))  
((*- endif *))  
((*- endblock title *))
((* block date *))  
((*- if nb.metadata["latex_metadata"]: -*))  
((*- if nb.metadata["latex_metadata"]["date"]: -*))  
    \date{((( nb.metadata["latex_metadata"]["date"] )))}  
((*- endif *))  
((*- endif *))  
((* endblock date *))  
((* block author *))
((*- if nb.metadata["latex_metadata"]: -*))  
((*- if nb.metadata["latex_metadata"]["author"]: -*))  
    \author{((( nb.metadata["latex_metadata"]["author"] )))}  
((*- endif *))  
((*- endif *))  
((* endblock author *))
person Claudio S.    schedule 20.05.2021