- 在DrawIO中绘制草图,例如:

- 在DrawIO中到处xml文件(不要勾选勾“压缩”);
- 在Gemini中导入xml文件,并输入以下提示词:
角色: 你是一位精通 LaTeX TikZ 和 PGF 绘图的专家开发者。
任务: 将提供的 Draw.io (diagrams.net) XML 代码转换为高质量、专业级的 LaTeX TikZ 绘图代码。
约束与要求:
编译环境: 使用 standalone 文档类。确保代码可以无错编译。
中文支持: 必须使用 ctex 宏包,确保图表中的中文能正确显示。
代码结构(关键):
严禁使用绝对坐标(例如:\node at (10.5, 3.2))。
必须使用 positioning 库(例如:below=of node1, right=of node2)来定义节点的相对位置。
样式分离: 使用 \tikzset 或在 tikzpicture 选项中全局定义样式(例如:block/.style={...}),不要在每个节点里硬编码样式。请尽量还原 XML 中的颜色(Hex 代码)和形状。
宏库要求: 必须包含 \usetikzlibrary{shapes.geometric, arrows.meta, positioning, fit, backgrounds, calc}。
智能分组: 如果图表中有容器或背景框(例如包含多个子节点的灰色底框),请使用 fit 库 来动态包裹这些节点,而不是画一个固定大小的矩形。
连线风格: 根据流程图的布局,适当地使用直角连线(-| 或 |-)。箭头请使用 Stealth 或类似的专业箭头。
逻辑还原: 请准确保持原图的逻辑流向和层级结构,不要因为自动布局而打乱顺序。
- 拷贝Gemini生成的tikz代码,例如:
documentclass[tikz, border=10pt]{standalone}
% 引入中文支持
\usepackage{ctex}
% 引入必要的 TikZ 库
% shapes.geometric: 用于椭圆 (ellipse)
% arrows.meta: 用于专业的箭头 (Stealth)
% positioning: 用于相对定位 (right=of)
% fit: 用于创建包裹节点的容器
% backgrounds: 用于控制图层
% calc: 用于计算坐标
\usetikzlibrary{shapes.geometric, arrows.meta, positioning, fit, backgrounds, calc}
% 定义颜色 (提取自 XML HEX 代码)
\definecolor{colorBlueFill}{HTML}{1BA1E2}
\definecolor{colorBlueStroke}{HTML}{006EAF}
\definecolor{colorRedFill}{HTML}{A20025}
\definecolor{colorRedStroke}{HTML}{6F0000}
% 全局样式定义
\tikzset{
% 基础椭圆样式
baseEllipse/.style={
ellipse,
minimum width=120pt, % 对应 XML width="120"
minimum height=80pt, % 对应 XML height="80"
thick,
align=center,
font=\sffamily % 使用无衬线字体
},
% 蓝色节点样式
blueNode/.style={
baseEllipse,
fill=colorBlueFill,
draw=colorBlueStroke,
text=white
},
% 红色节点样式
redNode/.style={
baseEllipse,
fill=colorRedFill,
draw=colorRedStroke,
text=white
},
% 容器框样式 (对应 id="Tn08SG7qedXVa0jG-SMa-3")
containerBox/.style={
draw=black,
thick,
inner sep=20pt, % 留出内部边距
rounded corners=0pt
},
% 连线样式
arrowLine/.style={
->,
>={Stealth[scale=1.2]}, % 专业的箭头样式
draw=black,
line width=1.5pt,
smooth % 平滑曲线
}
}
\begin{document}
\begin{tikzpicture}[node distance=40pt] % 定义节点之间的默认间距
% 1. 定义节点 (使用相对定位)
% 绘制左侧蓝色椭圆
\node[blueNode] (node1) {};
% 绘制右侧红色椭圆 (位于蓝色节点右侧)
\node[redNode, right=of node1] (node2) {};
% 2. 绘制容器 (使用 fit 库)
% 创建一个包含 node1 和 node2 的矩形框
% label 可以添加标签,如果需要的话
\node[containerBox, fit=(node1) (node2)] (box) {};
% 3. 绘制曲线箭头
% 原图逻辑:从容器左下角附近出发,经过中间弯曲,指向容器右上角
% 这里使用相对于 box 的锚点计算,避免绝对坐标
\draw[arrowLine]
((box.south west) + (0, 10pt)) % 起点:左下角略偏下
.. controls ((box.south) + (0, -30pt)) and ((box.center) + (-20pt, 90pt)) .. % 控制点:模拟原图的 S 型弯曲
((box.north east) + (0, -1)); % 终点:右上角
\end{tikzpicture}
\end{document}
5.复制到latex中编译,如果有偏差可手动调节。所画效果图:
