Экспорт 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: её можно обработать или встроить без
записи на диск.
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/.