写成 L a T E X 的代码。
Creato il: 10 gennaio 2026
Risposto usando GPT-5.2 Thinking da Chat01
Creato il: 10 gennaio 2026
Risposto usando GPT-5.2 Thinking da Chat01
pythonfrom PIL import Image, ImageEnhance img = Image.open('/mnt/data/image.png') img.size (678, 849)
pythonimport matplotlib.pyplot as plt, numpy as np plt.figure(figsize=(7,9)) plt.imshow(img) plt.axis('off') plt.show()
pythonimport matplotlib.pyplot as plt import numpy as np # zoom further crop = img.crop((0,0,678,849)) # enhance enh=ImageEnhance.Contrast(crop).enhance(1.4) plt.figure(figsize=(9,11)) plt.imshow(enh) plt.axis('off') plt.show()
下面是一份可直接编译的 TikZ/LaTeX 代码(用 standalone 生成单页图)。布局和连线按你图里的结构复刻(中心流程 + 左侧 Handle Error + 底部 Error/Fault + 右侧大回环)。
latex\documentclass[tikz,border=6pt]{standalone} \usetikzlibrary{arrows.meta,positioning,calc,shadows.blur,fit} \begin{document} \begin{tikzpicture}[ font=\small, >={Stealth[length=2.2mm]}, line width=0.8pt, node distance=11mm and 34mm, block/.style={ draw, rounded corners=6pt, fill=orange!15, minimum width=40mm, minimum height=12mm, align=center, blur shadow={shadow xshift=1.2pt, shadow yshift=-1.2pt} }, bigblock/.style={ block, minimum width=46mm, minimum height=16mm }, startdot/.style={circle, draw, fill=gray!70, minimum size=5mm, inner sep=0pt}, enddot/.style={double, circle, draw, fill=orange!15, minimum size=5mm, inner sep=0pt}, lab/.style={font=\scriptsize, inner sep=1pt} ] % ---------- nodes (center line) ---------- \node[startdot] (s) {}; \node[lab, right=2mm of s] {Start}; \node[block, below=6mm of s] (pwon) {\textbf{[D1-N6-OP-L1-001]}\\\textbf{Power ON}}; \node[block, below=of pwon] (comm) {\textbf{[D1-N6-OP-L1-002]}\\\textbf{Communication}}; \node[block, below=of comm] (conf) {\textbf{[D1-N6-OP-L1-003]}\\\textbf{Configure}}; \node[block, below=of conf] (init) {\textbf{[D1-N6-OP-L1-004]}\\\textbf{Initialize}}; \node[block, below=of init] (startapp) {\textbf{[D1-N6-OP-L1-005]}\\\textbf{Start application}}; \node[block, below=of startapp] (calib) {\textbf{[D1-N6-OP-L1-006]}\\\textbf{Calibration}}; \node[block, below=of calib] (pulse) {\textbf{[D1-N6-OP-L1-007]}\\\textbf{Run Pulse measurement}}; \node[block, below=of pulse] (pwoff) {\textbf{[D1-N6-OP-L1-008]}\\\textbf{Power Off}}; \node[enddot, below=8mm of pwoff] (e) {}; \node[lab, below=1mm of e] {End}; % ---------- left side nodes ---------- \node[bigblock, left=55mm of startapp] (herr) {\textbf{[D1-N6-OP-L1-009]}\\\textbf{Handle Error}}; \node[block, below=28mm of herr] (fault) {\textbf{[D1-N6-OP-L1-010]}\\\textbf{Error/Fault}}; % ---------- main vertical arrows ---------- \draw[->] (s) -- (pwon); \draw[->] (pwon) -- (comm); \draw[->] (comm) -- (conf); \draw[->] (conf) -- (init); \draw[->] (init) -- (startapp); \draw[->] (startapp) -- (calib); \draw[->] (calib) -- (pulse); \draw[->] (pulse) -- (pwoff); \draw[->] (pwoff) -- (e); % ---------- error -> handle, and resolved -> step ---------- \draw[->] (comm.west) to[out=180,in=60] node[lab, above] {Communication Error} (herr.north east); \draw[->] (herr.north east) to[out=20,in=180] node[lab, above] {Communication Error Resolved} (comm.west); \draw[->] (conf.west) to[out=180,in=35] node[lab, above] {Configuration Error} (herr.north); \draw[->] (herr.north) to[out=20,in=180] node[lab, above] {Configuration Error Resolved} (conf.west); \draw[->] (init.west) to[out=180,in=20] node[lab, above] {Initialize Error} (herr.west); \draw[->] (herr.west) to[out=0,in=180] node[lab, above] {Initialize Error Resolved} (init.west); \draw[->] (startapp.west) -- node[lab, above] {Start Error} (herr.east); \draw[->] (herr.east) -- node[lab, below] {Start Error Resolved} (startapp.west); \draw[->] (calib.west) to[out=180,in=-10] node[lab, above] {Calibration Error} (herr.east); \draw[->] (herr.east) to[out=0,in=180] node[lab, below] {Calibration Error Resolved} (calib.west); \draw[->] (pulse.west) to[out=180,in=-30] node[lab, above] {Pulse error} (herr.south east); \draw[->] (herr.south east) to[out=0,in=180] node[lab, below] {Pulse error Resolved} (pulse.west); % ---------- handle error -> fault, and fault -> power off ---------- \draw[->] (herr.south) -- (fault.north); \draw[->] (fault.east) -- (pwoff.west); % ---------- right-side big loop: Power Off -> Power ON ---------- \coordinate (rA) at ($(pwoff.east)+(55mm,0)$); \coordinate (rB) at ($(pwon.east)+(55mm,0)$); \draw[->] (pwoff.east) -- (rA) -- (rB) -- (pwon.east); % ---------- optional: left outer drop to fault (as in picture) ---------- \coordinate (lTop) at ($(pwon.west)+(-65mm,0)$); \coordinate (lBot) at ($(fault.west)+(-65mm,0)$); \draw[->] (pwon.west) -- (lTop) -- (lBot) -- (fault.west); % ---------- frame + title ---------- \node[fit=(s)(pwoff)(fault)(rA)(lTop), inner sep=14mm] (box) {}; \draw (box.north west) rectangle (box.south east); \node[ anchor=west, draw, rounded corners=2pt, fill=white, font=\scriptsize\bfseries, inner xsep=4pt, inner ysep=2pt ] at ($(box.north west)+(0mm,-2mm)$) {act Plant I\&C Operation (Tokamak Operation)}; \end{tikzpicture} \end{document}
如果你想要我把节点尺寸、间距、回路走线做得更“像原图”(比如左侧多根下落线、每个方块右下角的小图标也画出来),把你希望的 LaTeX 引擎(pdflatex/xelatex/lualatex)告诉我就行。
我用的是overleaf,把节点尺寸、间距、回路走线做得更“像原图” 一摸一样