如何使Mermaid流程图的子图沿垂直中线对齐?
解决Mermaid Elk布局子图垂直对齐问题
要让四个子图在垂直方向上居中对齐到同一条直线,可通过以下两种实用方法实现:
方法1:利用Elk布局的强制对齐参数
Elk布局支持通过自定义配置,强制子图容器的水平中心对齐。修改后的代码如下:
%%{init: {"flowchart": { "htmlLabels": false}, 'layout': 'elk', "elk": { "layoutOptions": { "org.eclipse.elk.layered.alignment": "CENTER", "org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN", "org.eclipse.elk.spacing.nodeNode": "20" } }}}%% flowchart TD classDef troncal fill:#0ef,stroke:#333,stroke-width:1px classDef obligatoria fill:lightgray,stroke:#333,stroke-width:1px classDef optativa fill:lightgreen,stroke:#333,stroke-width:1px subgraph C1["**Primer curso**"] M1[M I]:::troncal FI[FI]:::troncal M2[M II]:::troncal F1[F I]:::troncal QF[QF]:::troncal QI[QI]:::troncal IIQ[IIQ]:::obligatoria MMI[MMI]:::obligatoria end subgraph C2["**Segundo curso**"] M3[M III]:::troncal MF[MF]:::obligatoria TQA[TQA]:::obligatoria QO[QO]:::troncal CM[CM]:::obligatoria E[E]:::obligatoria MMM[MMM]:::obligatoria TC[TC]:::obligatoria EOE[EOE]:::troncal F2[F II]:::troncal end subgraph C3["**Tercer curso**"] EAC[EAC]:::obligatoria EIQ1[EIQ I]:::obligatoria T[T]:::obligatoria PQI[PQI]:::obligatoria RQ[RQ]:::obligatoria OS[OS]:::obligatoria CQA[CQA]:::obligatoria end subgraph C4["**Cuarto curso**"] SC[SC]:::obligatoria EIQ2[EIQ II]:::obligatoria IA[IA]:::obligatoria OGP[OGP]:::obligatoria RMDM[RMDM]:::obligatoria TFG[TFG]:::obligatoria end M1 --> M2 & MMI M2 --> M3 & MF & TQA & E & MMM M3 --> EAC & PQI & RQ F1 --> MF & TQA & E & MMM & EAC F2 --> E & EAC & IA FI --> EAC & RQ QF --> TQA QO --> CM & IA QI --> CM & IA IIQ --> TC & PQI TQA --> T & RQ & EIQ2 MF --> EIQ1 & RQ TC --> EIQ1 & T & RQ EOE --> PQI & OGP CQA --> RQ RQ --> EIQ2 OS --> EIQ2 MMM --> RMDM CM --> RMDM EAC --> SC OGP--> TFG
核心配置说明:
org.eclipse.elk.layered.alignment": "CENTER":强制所有节点(包括子图容器)在水平方向居中对齐org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN":让布局器将子图内部节点纳入整体计算,保证子图容器对齐的准确性
方法2:添加隐藏中心节点串联
若方法1效果不佳,可通过添加不可见的中心节点,给布局器明确的对齐参考:
%%{init: {"flowchart": { "htmlLabels": false}, 'layout': 'elk'}}%% flowchart TD classDef troncal fill:#0ef,stroke:#333,stroke-width:1px classDef obligatoria fill:lightgray,stroke:#333,stroke-width:1px classDef optativa fill:lightgreen,stroke:#333,stroke-width:1px classDef hidden display:none %% 隐藏的对齐参考节点 C1_center[ ]:::hidden C2_center[ ]:::hidden C3_center[ ]:::hidden C4_center[ ]:::hidden C1_center --> C2_center --> C3_center --> C4_center subgraph C1["**Primer curso**"] M1[M I]:::troncal FI[FI]:::troncal M2[M II]:::troncal F1[F I]:::troncal QF[QF]:::troncal QI[QI]:::troncal IIQ[IIQ]:::obligatoria MMI[MMI]:::obligatoria %% 将子图内部节点连接到中心节点,强化对齐 M1 --- C1_center FI --- C1_center end subgraph C2["**Segundo curso**"] M3[M III]:::troncal MF[MF]:::obligatoria TQA[TQA]:::obligatoria QO[QO]:::troncal CM[CM]:::obligatoria E[E]:::obligatoria MMM[MMM]:::obligatoria TC[TC]:::obligatoria EOE[EOE]:::troncal F2[F II]:::troncal M3 --- C2_center QO --- C2_center end subgraph C3["**Tercer curso**"] EAC[EAC]:::obligatoria EIQ1[EIQ I]:::obligatoria T[T]:::obligatoria PQI[PQI]:::obligatoria RQ[RQ]:::obligatoria OS[OS]:::obligatoria CQA[CQA]:::obligatoria EAC --- C3_center RQ --- C3_center end subgraph C4["**Cuarto curso**"] SC[SC]:::obligatoria EIQ2[EIQ II]:::obligatoria IA[IA]:::obligatoria OGP[OGP]:::obligatoria RMDM[RMDM]:::obligatoria TFG[TFG]:::obligatoria SC --- C4_center TFG --- C4_center end M1 --> M2 & MMI M2 --> M3 & MF & TQA & E & MMM M3 --> EAC & PQI & RQ F1 --> MF & TQA & E & MMM & EAC F2 --> E & EAC & IA FI --> EAC & RQ QF --> TQA QO --> CM & IA QI --> CM & IA IIQ --> TC & PQI TQA --> T & RQ & EIQ2 MF --> EIQ1 & RQ TC --> EIQ1 & T & RQ EOE --> PQI & OGP CQA --> RQ RQ --> EIQ2 OS --> EIQ2 MMM --> RMDM CM --> RMDM EAC --> SC OGP--> TFG
这种方法通过隐藏节点的垂直串联,让布局器自动将子图对齐到同一垂直线,即使子图内部节点数量或文本长度不同,也能保证整体对齐效果。
内容的提问来源于stack exchange,提问作者Pedro A. Garcia-Sanchez
相关产品推荐
相关产品推荐

