Перейти к содержанию

Экспорт TikZ

AnimaGeo экспортирует любую конструкцию в семантический TikZ для вставки в документ LaTeX — это аналог exportSVG для TikZ. Результат использует нативные примитивы TikZ (\draw circle, ellipse, (a)--(b), arc, [->]), настоящие LaTeX-подписи \node и \draw plot coordinates для дискретизированных кривых. Получается компактный редактируемый файл .tex.

Быстрый старт

Python API

from animageo import AnimaGeoScene

class Fig(AnimaGeoScene):
    def construct(self):
        self.loadGGB('triangle.ggb', style='book_blue.json',
                     export={'size': {'width': 600, 'height': 480}})
        # Фрагмент для \input{}, по умолчанию:
        self.exportTikZ('triangle.tex')
        # Или автономный компилируемый документ:
        self.exportTikZ('triangle_standalone.tex', standalone=True)

exportTikZ также возвращает строку TikZ: её можно обработать или встроить без записи на диск.

tikz = self.exportTikZ()           # возвращает строку-фрагмент

CLI

# формат определяется по расширению .tex
python -m animageo triangle.ggb -o triangle.tex --export-size 600 480

# формат указан явно, создаётся автономный документ
python -m animageo triangle.ggb -o triangle.tex --format tikz --standalone

Вставка фрагмента в документ

По умолчанию создаётся только окружение tikzpicture и необходимые строки \definecolor. Подключите его через \input:

\documentclass{article}
\usepackage{tikz}
% Для кириллических подписей; в документах только с английским не требуется:
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}
\begin{document}
\input{triangle.tex}
\end{document}

--standalone или standalone=True создаёт полный документ \documentclass{standalone} с поддерживающей кириллицу преамбулой. Он самостоятельно компилируется в плотно обрезанный PDF.

Координаты, размеры и единицы

  • Координаты заданы в математических единицах конструкции: A = (1, 2) превращается в (1,2), поэтому .tex остаётся читаемым и редактируемым.
  • Рисунок задаёт x=<S>cm, y=<S>cm, чтобы физический размер совпадал с растровым выводом SVG/PNG при выбранном размере экспорта. Геометрические радиусы и полуоси эллипса выводятся без единиц и масштабируются вместе с координатной единицей.
  • Элементы фиксированного размера — маркеры точек, толщины линий, наконечники стрелок и шрифты подписей — используют абсолютные pt. Они остаются постоянными, если позже изменить масштаб через x=/y=.

Чтобы масштабировать весь рисунок в документе, измените x=/y= либо оберните \input в \scalebox или tikzpicture с scale=.

По умолчанию пиксели переводятся в физический размер при 96 dpi (pt = px * 0.75). Значение можно изменить через dpi.

Параметры

Сигнатура: exportTikZ(filepath=None, *, standalone=False, options=None, **kwargs). Передайте параметры напрямую или используйте готовый TikZOptions, но не оба варианта одновременно.

from animageo.exporters.tikz import TikZOptions

opts = TikZOptions(
    standalone=True,
    dpi=150,                 # перевод px → cm/pt, по умолчанию 96
    clip=True,               # обрезать по холсту экспорта, по умолчанию True
    background=False,        # None=фон сцены, False=нет, либо строка цвета
    emit_font_size=True,     # \fontsize у подписей; False → шрифт документа
    coordinate_precision=4,  # знаки после запятой для координат MU
    size_precision=3,        # знаки после запятой для размеров pt
)
self.exportTikZ('fig.tex', options=opts)
Параметр По умолчанию Значение
standalone False Обернуть в компилируемый документ standalone
dpi 96 Пикселей на дюйм при переводе px → cm/pt
clip True Обрезать геометрию по прямоугольнику холста
background None None = style.background сцены, False = без фона, либо цвет
emit_font_size True Выводить \fontsize у подписей; False = шрифт документа
coordinate_precision 4 Количество знаков после запятой в координатах
size_precision 3 Количество знаков после запятой в размерах pt
comment_header True Выводить заголовок % Generated by AnimaGeo

Что экспортируется

Поддерживаются все рисуемые типы элементов. Они читают тот же итоговый стиль, что и Manim-рендерер: импорт GGB → overlay → явный elem.style.

Элемент Результат TikZ
Точка \draw ... circle (Rpt) либо маркер-квадрат/треугольник/крест/плюс
Отрезок (a)--(b) и засечки равенства
Прямая / луч обрезка по области просмотра, затем (a)--(b)
Вектор \draw[->] (a)--(b) и засечки
Многоугольник \fill ... -- cycle и необязательная обводка
Окружность (c) circle (r), с учётом штриха
Дуга / сектор (start) arc (a1:a2:r) и необязательная заливка
Угол сектор с заливкой и концентрические дуги либо квадрат прямого угла; подпись на биссектрисе
Коника окружность/эллипс нативными примитивами; парабола, гипербола и вырожденные прямые через адаптивный sampler
Функция \draw plot coordinates {...} с разрывами на асимптотах
ImplicitCurve отрезки marching squares
Locus \draw plot coordinates {...}
Подписи настоящий LaTeX \node с текстом элемента, anchor и offset

Порядок слоёв, цвета через \definecolor, прозрачность, штрихи, окончания линий, засечки и автоматический размер дуг углов следуют активному стилю. Штрих совпадает с рисунком: его длина берётся из периода штриха стиля (stroke_dash_period_px / rendering.dash_period_px), а не из фиксированного шаблона.

Примечания и ограничения

  • Кадрирование общее с SVG: используйте export=/content=/reference= в API или --export-size/--source-rect/--fit в CLI. Вызов только applyStyle() оставляет ptUnit=1 на полном холсте Manim.
  • Стрелки используют не требующий библиотек наконечник ->. Чтобы получить более сложные наконечники, подключите arrows.meta в преамбуле и измените стиль.
  • Волнистые засечки равенства приближённо заменяются прямыми.
  • Дискретизированные кривые — парабола, гипербола, функция, неявная кривая и locus — выводятся как ломаные. Неявная кривая может превратиться во множество коротких \draw, по одному на ребро marching squares, поэтому .tex бывает большим. Где возможно, используются нативные окружности, эллипсы, прямые и дуги.
  • Кусочные функции используют синтаксис GeoGebra If[...] с квадратными скобками, например Function("y = If[x < 0, -x - 1, x - 1]").
  • Мягкая деградация: элемент, который не удалось построить или дискретизировать, пропускается с WARNING, как в SVG-рендерере. Ошибка одного элемента не прерывает весь экспорт.
  • Для кириллических и греческих подписей нужны fontenc/babel. В режиме standalone они добавляются автоматически, а для фрагмента их нужно включить в преамбулу документа. Кириллица внутри $…$ выводится как \text{…}: математический алфавит T2A не содержит кириллических глифов, поэтому буквальный \node {$Б$} компилируется без ошибки, но ничего не печатает. Латинские и греческие подписи, как и раньше, выводятся без изменений.

Проверенное покрытие

Экспортер проверяется end-to-end тестами в tests/test_tikz_export.py. Они охватывают все рисуемые типы: точки со всеми формами маркеров, отрезки с прямыми и волнистыми засечками, прямые и лучи с обрезкой, векторы, многоугольники, обычные, прямые и рефлексные/многодуговые углы, окружности со штрихом, дуги, секторы, полуокружности, всё семейство коник с вырожденными случаями, обычные и кусочные функции, неявные кривые, locus и конструкторы коник. Проверяется каждый параметр TikZOptions и smoke-компиляция через pdflatex, которая пропускается, если LaTeX не установлен.

См. также: animageo/exporters/tikz/.