You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PlantUML活动图右侧泳道活动无法垂直对齐问题求助

问题解决:PlantUML双泳道活动垂直对齐异常修复

问题分析

你遇到的核心问题:

  • 右侧Swimlane2内的活动(Do B、Do D、Do F、Do H、Do M、Do N)无法垂直居中对齐,出现水平偏移
  • Swimlane2因内容自动扩宽,且用空活动解决线条交叉的方式干扰了布局逻辑

根源在于PlantUML会自动根据泳道内最宽元素调整宽度,分支逻辑里的泳道切换容易打破垂直对齐布局;另外原代码存在语法错误(:Do L";多了一个引号),空活动的写法也会干扰布局计算。

解决方案

1. 修正语法错误

把代码里的:Do L";改为:Do L;,避免解析异常。

2. 替换空活动为隐藏活动

用:__hidden__;替代原代码的空活动,既解决线条交叉问题,又不会干扰布局计算。

3. 固定泳道宽度+优化分支结构

通过skinparam固定泳道宽度,避免自动扩宽;同时明确分支内的泳道切换逻辑,确保Swimlane2的活动处于统一垂直对齐线。

修正后的完整代码

@startuml
title: Test

# 固定泳道宽度,避免自动过宽
skinparam swimlane {
    width 150
}

|Swimlane1|
|#LightGreen|Swimlane2|
|Swimlane1|
:Do A; 
|Swimlane2|
:Do B;
|Swimlane1|
:Do C;
|Swimlane2|
:Do D;
|Swimlane1|
:Do E;
if (Test1?) then (  <b>yes</b>)
    |Swimlane2|
    :Do F;
    |Swimlane1|
    :Do G;
else (  <b>no</b>)
    :__hidden__;  // 替换空活动,解决线条交叉
    |Swimlane2|
    :Do H;
    |Swimlane1|
    :Do I;
    if (Test2?) then (  <b>no</b>)
        :Do J;
    else (  <b>yes</b>)
        if (Test3?) then (  <b>yes</b>)
            :Do K;
        else (  <b>no</b>)
            :Do L;
            |Swimlane2|
            :Do M;
            :Do N;
            |Swimlane1|
            :Do O; 
        endif
    endif
endif
:Do P;
stop
@enduml

效果说明

  • Swimlane2内的所有活动将垂直居中对齐,不再出现水平偏移
  • 固定泳道宽度后,不会因内容自动扩宽
  • 隐藏活动替代空活动,既解决线条交叉问题,又保持布局整洁

内容的提问来源于stack exchange,提问作者Chris Phillips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:22:43