Nbconvert латексное позиционирование фигуры

Когда я конвертирую записную книжку в латекс (затем PDF), изображения перемещаются в нижнюю часть страницы. Я подумал, что в латексе его можно будет сохранить в текущей позиции, используя спецификатор размещения 'h':

\begin{figure}[placement specifier]
... figure contents ...
\end{figure}

Можно ли настроить nbconvert для использования этого значения по умолчанию, чтобы потом мне не приходилось вручную обрабатывать его?

Ссылка: https://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions

Спасибо, я воспользовался решением из указанной статьи.

fatdragon 29.12.2018 22:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
501
1

Ответы 1

Я думаю, вы можете получить то, что хотите, переопределив соответствующие блоки в своем шаблоне.

Обратите внимание, что в document_contents.tplx блоки data_png, data_jpg и т. д. Вызывают один и тот же макрос draw_figure.

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

Добавление чего-то вроде

((*- block data_png -*))((( draw_figure_2(output.metadata.filenames['image/png']) )))((*- endblock -*))
((*- block data_jpg -*))((( draw_figure_2(output.metadata.filenames['image/jpeg']) )))((*- endblock -*))
((*- block data_svg -*))((( draw_figure_2(output.metadata.filenames['image/svg+xml']) )))((*- endblock -*))
((*- block data_pdf -*))((( draw_figure_2(output.metadata.filenames['application/pdf']) )))((*- endblock -*))


% copied macro draw_figure and made some naive changes; modify as needed
((* macro draw_figure_2(filename) -*))
((* set filename = filename | posix_path *))
((*- block figure scoped -*))
    \begin{figure}[h] % or whatever you want
    \begin{center}
    \adjustimage{max size = {0.9\linewidth}{0.9\paperheight}}{((( filename )))}
    \end{center}
    \end{figure}
    { \hspace*{\fill} \\}
((*- endblock figure -*))
((*- endmacro *))

Спасибо, это выглядит очень полезно. Однако после копирования вашего кода в файл шаблона я получаю сообщение об ошибке: jinja2.exceptions.UndefinedError: 'output' is undefined при запуске jupyter nbconvert --to latex toplevel.ipynb --template latex-template.tplx. Есть идеи?

Thorsten Altenkirch 23.04.2019 13:59

Хорошо, я попытался добавить ((*- extends 'article.tplx' -*)), который останавливает ошибку, но также не выводит измененный латексный код.

Thorsten Altenkirch 23.04.2019 14:14

@ThorstenAltenkirch Я не могу воспроизвести вашу проблему. Вы можете попробовать заменить «data_priority» (см. nbconvert.readthedocs.io/en/latest/customizing.html), просто чтобы проверить, что шаблон используется. Просто добавьте эту строку в свой шаблон: ((*- block data_priority -*)) data_priority was here ((*- endblock -*)), и вы увидите, что все ваши выходные данные заменены текстом «data_priority was here».

butterwagon 03.05.2019 17:38

Другие вопросы по теме