PFC电流环LQR最优控制设计:从PI到状态反馈的Simulink仿真实践

发布时间:2026/10/20 7:36:33

PFC电流环LQR最优控制设计:从PI到状态反馈的Simulink仿真实践 先说句大实话功率因数校正PFC的电流环是数字电源里最容易让人半夜抓头发的地方。尤其是做了平均电流控制以后PI参数怎么调都会在正弦波形的峰值附近掉队电感电流拉出一个圆角谐波就上去了。后来我把内环从“PI载波调制”的思路换成“LQR最优状态反馈稳态前馈”的做法在Simulink里重新建模跑了一遍电流波形直接从“肉眼可见的失真”变成“几乎贴着参考走”。这篇就把整个设计过程、仿真建模的关键细节和踩过的坑完整拆出来适合已经在做PFC、想从PI外环升级到现代控制方法或者正在为毕业论文找“LQRSimulink”落地思路的朋友参考。1. 为什么PFC电流环是高带宽、低超调的矛盾体1.1 电流跟踪到底在跟踪什么单相Boost PFC的电流参考值并不是一个纯净的50赫兹正弦波而是整流桥之后的“正弦半波”。也就是说每一毫秒电流参考值都在按正弦绝对值变化频率是工频的两倍。这个参考值本身幅值还会随负载和输出电容电压波动由电压外环动态调整。所以电流内环面对的任务不是跟踪一个恒定值而是跟踪一条时刻变化的曲线。这带来一个核心约束电流环带宽必须远高于电网频率一般工程上要求电流环闭环带宽至少是正弦参考频率的20到40倍。以50赫兹工频、两倍频100赫兹的参考谐波来说电流环闭环带宽做到2到5千赫兹才能保证相位滞后不明显。如果带宽不够峰值处误差积累、过零点处跟不上输入电流THD直接飘到15%以上。更麻烦的是Boost变换器的控制对象不是常值增益。占空比到电感电流的传递函数里包含着一个由输出电压和电感值决定的增益同时还叠加电网电压这个大扰动。传统PI要同时满足“高带宽”和“无静差”实际上是在相位裕度和增益裕度之间反复拉扯——把比例系数调大带宽确实上去了但超调也跟着上来适当增加积分系数稳态误差变小了但相位裕度又被吃掉一截。这种顾此失彼的矛盾正是PI电流环在PFC上不好调的根本原因。1.2 PI调不动的两个典型现象我在仿真里确实见过这两种经典症状先列出来方便你对自己手上的PI数据症状一电感电流在正弦峰值区域明显变圆。把PI的Kp调高以后峰值处电流勉强跟上参考但过零点附近电流反而提前“低头”因为跟踪相位滞后在过零时最敏感。症状二负载突变的瞬间电流内环出现衰减振荡。Pi带宽如果设置的比电压环只高几倍两个环路之间就会相互激励电流波形上会出现明显的高频包络。这两种现象本质上是同一个原因PI控制器把“控制增益”和“系统状态”放在同一个反馈通道里无法独立管理“误差消除能力”和“阻尼特性”。于是我想法很简单——能不能用状态空间的方法把电流误差、误差积分、控制量这三个量放在一个优化框架里统一权衡这就是LQR切入的动机。1.3 LQR的定位它本质上是“有最优代价的极点配置”LQR线性二次型调节器做的事情是给定线性系统状态方程寻找状态反馈增益让一个由状态误差和控制量加权平方积分组成的代价函数最小。很多人一听到LQR就以为是“现代控制理论”的高大上方法实际上它的落脚点非常工程PI调节器是在频域里尝试安排闭环的零极点LQR是在时域里用一组权重矩阵Q和R间接安排闭环极点。两者等价于极点配置区别在于LQR能自动给出一个满足“误差小且控制量不过猛”折中的解并且不会出现你想压一个极点、结果另一个极点飞上天的情况。放在PFC电流环里这套思路特别合适我们可以把电感电流跟踪误差当作要压制的状态把误差积分当作消除稳态静差的“记忆状态”把控制量当作要惩罚的成本。LQR求出的K就是电流环的最优反馈增益K直接作用于实测电流和参考误差上不需要再做频域补偿器设计。2. LQR设计前的状态空间从Boost开关方程到误差增广模型2.1 平均状态方程从开关电路到微分方程要设计LQR第一步是把Boost主电路写成连续时间状态方程。单相Boost PFC在CCM连续导通模式下忽略开关纹波用平均模型描述电感电流的微分方程是L * diL/dt Vin - (1 - d) * Vdc其中 Vin 是整流桥输出电压瞬时值d 是占空比Vdc 是输出电容电压。这里 Vdc 包含电压纹波但在电流环设计时我们通常把它当作慢变参数取额定值带入。为了后面设计方便我定义一个等效控制量 u 1 - d代表开关管的“关断占空比”那么方程变成L * diL/dt Vin - u * Vdc从形式上看这是一个线性一阶系统控制量 u 乘以 Vdc 进入方程。之所以要用 u 而不是直接用 d是为了让表达式里的负反馈链路更干净后面设计状态反馈时不容易符号混乱。2.2 增广积分误差LQR要配合积分项才能跟踪动态参考如果直接对电感电流 diL/dt (Vin - u*Vdc)/L 使用LQR设计得到的是有差控制——电流稳态时和参考值之间会存在偏差因为比例型状态反馈对非零参考的跟踪能力有限尤其面对正弦变化参考时稳态误差非常明显。解决办法是引入积分增广状态。仿照经典PI中“积分项消除静差”的逻辑在状态向量里加入一个误差积分项e iref - iLx2 ∫ e dt增广后的状态向量取 x [e; x2]。接下来把控制量拆成“稳态前馈 u0 反馈偏移 v”。稳态前馈部分对应Boost的理想电压变换关系而反馈偏移 v 是LQR真正要设计的控制输入。对误差状态做推导时会发现一个关键公式de/dt Vdc / L * vdx2/dt e这个二阶增广系统就是LQR设计用的对象。注意这里B矩阵不是传统的开关控制率而是“误差增长速率对控制偏移的灵敏度”这正是增广误差模型和普通状态方程的不同之处。你不需要把这个模型推回原始功率级只需要保证这个误差模型能够反映真实的电流误差动态。2.3 前馈量的选取别把电网电压波动全丢给反馈控制律最终写成u (Vin - L * diref/dt) / Vdc - K * x其中 K [K1, K2]K1 对应误差项K2 对应积分项。这里 (Vin - L*diref/dt)/Vdc 是前馈占空比占据控制量的大部分反馈部分只在误差出现时才起作用。对比一下就会发现如果省略 diref/dt 项只用 Vin/Vdc 做前馈电感电流在参考正弦的斜率突变处会明显滞后尤其是在过零区域。而不省略这一项相当于把“参考变化所需的电感压降”直接前馈进占空比LQR反馈只需要修正模型误差和扰动即可。这个前馈对最终波形的影响很大强烈建议保留。3. Q矩阵和R的整定策略量纲、初值和调参顺序3.1 Q/R的物理意义与数值敏感度LQR的代价函数是J ∫ (x^T * Q * x v^T * R * v) dtQ 是正定对称矩阵R 是正标量单控制量。Q 里的第 i 个对角线元素表示对第 i 个状态偏差的重视程度R 表示对控制量大小的惩罚。这里最容易犯的错误是把 Q 取成 [q1 0; 0 q2] 后直接随手填数字却不知道这些数字的量纲和数值级别。电流偏差 e 的单位是安培积分项 x2 的单位是安培·秒控制偏移 v 本身是无量纲的占空比。如果 Q 里 e 的权重填 1积分项权重填 100控制量权重填 0.01这组数字只有在对应的状态值处于同一数量级时才是合理的。一个5安培的电感电流和0.5伏的控制偏移放在同一个代价函数里数值尺度差了10倍LQR解出的K会过度惩罚小状态、忽略大状态结果就是响应变迟钝。建议先在Simulink里跑一次开环仿真记录正常运行时的峰值误差的峰值大约多大、积分项峰值多大、控制偏移的峰值多大再按“归一化权重”的思路去设置Q和R。我的习惯是先把所有量换算成标幺值再做设计这样每个状态的权重可以直观理解为“允许的相对偏差”。3.2 一组可复现的初始参数下面的参数是基于一个典型单相Boost PFC例子电感3毫亨、输出电容470微法、额定输出电压400伏、电网220伏有效值、开关频率20千赫兹、负载200欧姆。我给出的初始权重q1 1, q2 100, R 0.01这组权重的意义是让误差的权重为1让累计误差的权重为100意味着设计者允许电流偏差在较短时间累积但不允许长期存在控制量惩罚0.01意味着控制成本相对宽松可以让反馈增益适当大一些。3.3 用MATLAB求解LQR增益的脚本在MATLAB里直接用 lqr 或 dlqr 即可。工程上建议直接做离散化设计因为本身控制器就运行在20千赫兹的采样率下。参考脚本%% 单相Boost PFC 参数 fs 20000; Ts 1/fs; L 3e-3; C 470e-6; Vdc 400; R 200; %% 连续误差增广模型 % 状态x [e; x2], eiref-iL, x2∫e dt % de/dt Vdc/L * v % dx2/dt e Ac [0 0; 1 0]; Bc [Vdc/L; 0]; Cc [1 0]; Dc 0; %% LQR权重 q1 1; q2 100; Rw 0.01; Q diag([q1 q2]); %% 连续LQR [Kc, S, e] lqr(Ac, Bc, Q, Rw); fprintf(连续域K: K1%.2f K2%.2f\n, Kc(1), Kc(2)); %% 离散化设计推荐 sysc ss(Ac, Bc, Cc, Dc); sysd c2d(sysc, Ts, zoh); [Kd, Sd, e] dlqr(sysd.A, sysd.B, Q, Rw); fprintf(离散域K: K1%.3f K2%.3f\n, Kd(1), Kd(2));实际仿真时我会直接用离散域Kd因为它和Simulink里离散控制器的采样行为一致。如果先用连续域Kc放入离散控制器在高频段会有明显的相位误差尤其是当开关频率只有20千赫兹时这种差异不能忽略。3.4 调参顺序先积分权重后控制权重调参时不要同时动好几个权重。我的顺序是固定R0.01只调q1。观察电感电流的瞬态响应q1越大误差被压制得越快但过大的q1会让控制偏移v在阶跃瞬间出现尖峰占空比容易碰到限幅。固定q1调q2。q2影响低频段的跟踪精度也就是正弦峰值的贴近程度。q2太小稳态电流和参考之间会有明显“脱开”的恒差q2太大积分动作过强负载突变时容易出现电流振荡甚至和电压外环打架。最后调R。R是“总成本旋钮”R越小所有反馈增益成比例放大响应越快但输出也越容易饱和R越大控制越温和但跟踪精度和动态性一起下降。4. Simulink模型搭建从主电路到控制器的完整链路4.1 主电路与被控对象的连接方式Simulink里PFC模型通常有两种建法一种是直接用PowerGUI模块搭建完整电力电子电路另一种是用受控电压源/电流源代替开关网络搭建平均模型快速验证控制算法。这两种模型的用途不同完整开关电路模型用于验证最终PWM波形和谐波平均模型用于快速调参数。我的建议是前期调K值时用平均模型因为仿真速度快不会因为开关纹波干扰你判断电流跟踪效果等K值基本确定后再切到完整开关电路模型跑一遍看实际PWM调制下的THD和功率因数。平均模型里把开关管和二极管网络用一个受控电压源替换电压值 (1 - d) * Vdc。电感电流通过受控电流源反馈回来作用于电容这样就模拟了Boost的功率守恒关系。完整模型则用MOSFET和二极管元件PWM信号通过Gates端口输入。无论哪种模型控制系统都建议用离散域搭建采样周期Ts等于开关周期。控制器内部所有模块的采样时间都设置成Ts避免混用连续和离散模块导致仿真步长混乱。4.2 电流参考值生成的细节电流参考幅值由电压外环PI输出乘以归一化正弦绝对值iref PI_volt_out * abs(sin(2 * pi * 50 * t))电压外环的PI输出就是 Iref_m也就是正弦参考的峰值幅值。这里要注意电压环的PI输出必须限制最小值防止启动时参考变成负值。Simulink里可以加一个Saturation限幅模块下限设0上限根据额定电流预留1.5倍裕量。参考导数 diref/dt 也需要在模型里同步计算不能靠差分硬算。推荐直接用 Clock 模块产生时间信号再通过一个自定义函数或者子系统计算 Iref_m * 2 * pi * 50 * cos(...)并同样乘以幅值。在控制律里同时用到 iref 和 diref/dt这样前馈项才完整。4.3 控制律子系统的内部结构控制律子系统接收四个输入实测电压Vin、实测输出电压Vdc、实测电流iL、参考电流iref。内部处理流程计算误差 e iref - iL送到积分器得到积分项x2。用离散LQR增益Kd分别乘以e和x2求和得到反馈偏移v。计算前馈项 u0 (Vin - L * diref/dt) / Vdc。计算等效控制量 u u0 - Kd(1)*e - Kd(2)*x2。注意这里的减号来自控制律 v -Kx。占空比 d 1 - u最后接入PWM生成模块。这个方法里直接使用占空比输出不需要再嵌套PI调制器。电感电流的PWM平均模型会按照占空比执行。4.4 PWM生成与限幅PWM生成可以使用自带PWM Generator模块也可以自己搭“比较器三角波”。推荐后者因为更直观把一个频率20千赫兹、幅值0.5的三角波和占空比信号做比较输出PWM脉冲到开关管。注意两点占空比信号必须先经过Saturation限幅建议上下限0.05和0.95。如果不限幅启动瞬间占空比可能冲到1开关管直通或者二极管反向恢复会导致仿真发散。三角波发生器必须和控制系统采样同步。如果三角波还有相位移会出现“次谐波振荡”电流波形包络上出现间隔开关频率的毛刺。最好在模型里确保三角波相位从0开始且采样周期和PWM周期严格一致。4.5 电压外环与电流内环的时间尺度分离控制结构是“电压外环电流内环”电压环的PI输出是Iref_m电流环用LQR跟踪iref。两个环路的带宽必须拉开距离常见的做法是让电压环带宽在10到20赫兹电流环带宽在2到5千赫兹差两个数量级以上。电压环PI参数可以粗调比例系数取一个较小的初值积分时间常数根据输出电容大小调整。仿真中观察Vdc启动波形如果Vdc出现过冲说明电压环太快如果Vdc回升太慢说明PI增益偏低。电压环对电流环的干扰在时间尺度上被压制得很小这时LQR才能正常发挥。5. 仿真中一定会遇到的坑与排查过程5.1 误差积分项饱和导致的电流畸变第一次跑通完整开关模型时我遇到的第一个问题是启动阶段电感电流特别大然后畸变持续了好几个周期。排查链路是这样的先关掉PWM开环看占空比阶跃下的电感电流响应确认主电路没问题再把控制器接上打开误差积分项的Scope发现启动瞬时误差积分x2已经冲到几千的数值量级然后限幅我没加Saturation导致K2*x2这一项在控制器里被削顶占空比短时间内无法恢复到正常值。解决办法也很直接在积分器上加入限幅限幅范围根据仿真中x2的实际范围设置比如正负10。同时给控制律里的v单独加一个限幅当占空比触碰上下限时停止积分累积防积分饱和。这个思路和PI的anti-windup本质一样只是更加直白。5.2 离散化方式导致的相位滞后另一个隐蔽的坑来自连续域K和离散域K的差异。用连续域LQR算出来的K放进离散控制器后在20千赫兹采样率下电流波形会有一点点相位滞后误差不大但看FFT的话会发现THD差0.5%左右。如果你在仿真中看到电流的过零点比参考稍晚但又不是积分权重不够的“脱开”形状那大概率就是离散化滞后。用c2d(sysc, Ts, zoh) 离散化后再用dlqr求解相位滞后会明显改善。这一步千万别省尤其当开关频率降到10千赫兹级别时连续域设计直接用在离散系统上会带来明显的稳定性恶化。5.3 工作点偏移后的K值失效问题LQR是基于一个固定工作点线性化的系统设计的但PFC的输出电压Vdc会随着负载变化Vin也会随电网电压瞬时变化。我在仿真里故意把负载从200欧姆突变到100欧姆结果发现电流峰值处又出现了一段时间的跟踪误差过了十几毫秒才恢复。这不是K值错了而是前馈项里的Vdc没有跟上真实值。控制律里用的Vdc是测量值如果测量滤波时间常数太长反馈项K*e已经做了补偿但前馈项还在用旧电压等效于系统出现了一个额外扰动。解决办法是让Vdc的测量滤波尽量快比如用一阶低通截止频率设在500到1000赫兹后再进前馈计算。注意电压环用的Vdc可以慢一点电流环前馈用的Vdc必须快。5.4 仿真步长引起的“假振荡”还遇到过一种特别气人的情况仿真结果在电流峰值处有高频振荡但无论如何调K都消不掉。后来把仿真步长从自动改成固定步长2e-6秒振荡立刻消失。原因是自动变步长求解器在开关切换瞬间会自适应减小步长但有时它在占空比接近限幅区域会跳过一些细节造成数值上的“伪振荡”。用固定步长、步长设为开关周期的十分之一以下比如20千赫兹对应5e-5秒再缩小到1e-6到2e-6秒能有效避免这类问题。完整开关模型建议离散求解器average模型可以用连续求解器但固定步长更稳。6. 结果评估谐波、功率因数和动态响应怎么看6.1 用FFT分析谐波含量Simulink里做FFT分析最直接的方法是给输入电流加一个To Workspace记录数据然后用MATLAB的fft函数分析或者使用PowerGUI自带的FFT分析工具。以20千赫兹开关频率为例FFT里需要关注的谐波分量在100到2500赫兹范围也就是50次谐波以内。PFC的谐波指标主要看THD通常要求总THD低于5%电流中各次谐波不高于第三、五、七次等低次谐波的很多限制。我在仿真结果里LQR方案在50赫兹到2.5千赫兹范围内的THD能稳定在3%以下比传统PI的5到6%低接近一半。但注意THD受积分时间长度的影响很大。建议采集至少10个工频周期的数据再做FFT且求THD时忽略开关频率附近的边带因为这些是PWM固有纹波不代表电流控制质量。6.2 LQR与PI对比的一组仿真数据用同一套主电路和同一负载分别跑PI和LQR电流内环得到的典型数据如下指标PI电流内环LQR电流内环稳态电流THD20次平均5.2%2.8%过零点附近最大跟踪误差0.5A0.18A负载突变50%恢复时间15ms8ms电流峰值最大偏差8%3%控制量饱和次数每工频周期频繁偶尔这组数据是基于某次仿真参数不代表LQR在所有工况下绝对优于PI但趋势是明确的LQR把“误差消除”和“控制量受限”在代价函数里做了全局折中因此同样的负载突变下控制量不会猛烈冲击限幅动态恢复更平稳。6.3 关于调参的几句总结我最终使用的K值是在离散域直接设计得到Q diag([1 100])R 0.01仿真波形在额定工况和半载工况下都表现稳定。如果你用我的脚本算出来的K跑出来的电流完全发散不要怀疑脚本先检查前馈项Vin的符号和整流后电压的方向这是最容易出错的地方。另外Vdc在启动过程中是从0爬升的前馈项里Vdc小的时候占空比会很大LQR反馈项还来不及抑制误差。所以启动阶段可以先让电流环参考幅值从0缓慢斜坡上升到额定值同时电压环PI不参与控制用开环软启动把Vdc抬到额定值附近再加闭环这是工程上更稳的做法。做完这个项目后我的体会是LQR在PFC电流环上的价值不是“换一个控制器”本身而是它逼着你把被控对象、参考动态和控制代价全部量化。能把状态空间模型写清楚权重矩阵按物理意义调好LQR给出的增益往往比拍脑袋调出来的PI参数要稳得多。这个流程也可以平移到我后来做的三相PFC整流器里——只是状态变量多了两相Q矩阵维度变大前馈项需要扩成三相旋转坐标系但核心思路完全一致。
延伸阅读

更多相关文章

2026/10/20 7:36:33

数据库存储与文件结构实战:从RAID到缓冲管理

聊到数据库,大多数人第一反应是SQL写法、索引设计、优化器行为。但真正跑过线上系统的人都明白,一台数据库在压力下是稳如老狗还是彻底卡死,胜负手往往不在SQL,而在存储这一层。这段时间我把《数据库系统概念》第十章“存储和文件…

2026/10/20 7:36:33

两线制4-20mA输出方案:基于GP8102SL/GP8212SL的共源型电路设计

做工业现场信号输出这几年,我越来越觉得4-20mA这个接口特别像老厂房里的水泥路——看着朴素,但所有设备都得从它上面走。现场仪表、阀门定位器、变频器、温度变送器,最后进DCS/PLC,绝大多数还是靠这4到20毫安的电流说话。最近我把…

2026/10/20 7:36:33

AI网页生成如何摆脱模板感:参考库驱动的领域化实践

1. 项目概述:当AI网页生成从“模板感”走向“人味儿”“给 AI 喂了一个参考库,它做的网页终于不像 AI 了”——这句话刚在技术圈传开,我就在三个不同行业的客户群里看到转发。不是因为多炫酷,而是太真实:某高校数字人文…

2026/10/20 8:26:47

Hermes Agent 持久记忆架构拆解:分层存储与主动召回实战

1. 从“金鱼记忆”到“长期记忆”:为什么我们需要一个会长记性的 Agent做 AI 应用开发的人都有一个共同的痛点:你花了一下午调教好的对话助手,关掉窗口再打开,它就像被敲了一记闷棍,完全不记得你是谁、之前聊过什么、上…

2026/10/20 8:26:47

Kubernetes API Server 核心机制全解析:从请求链路到 Watch 原理

很多人学 k8s 的头一步,是找一个现成的 YAML 抄下来,然后kubectl apply一下,看到 Pod 跑起来就觉得入门了。这个流程走通之后,接下来一定会被一个问题卡住:这个 Pod 到底是谁创建的?kubectl 只是敲在本地的…

2026/10/20 8:26:47

大数据分析实战路径:从数据清洗到分布式模型落地全解析

做大数据分析这些年,我见过太多人一上来就抓框架、追组件,结果数据还没摸到,光环境依赖就折腾了两周。这行的门槛从来不是工具,而是分析思路和数据嗅觉。所以我写这篇实战指南,就是要把“从理论到代码落地”这件事说透…

2026/10/20 8:26:47

CVE-2021-4034深度复盘:pkexec本地提权漏洞原理与安全自查

这一篇应该是2021年本地安全领域里最值得反复复盘的一个案例。CVE-2021-4034,出在polkit的pkexec组件上,一个长期以setuid方式存在、几乎所有Linux发行版都默认带上的小工具。攻击者不需要高权限,不需要奇怪配置,只要能在机器上以…

2026/10/20 8:26:47

if-else深度解析:从执行细节到代码重构与性能优化

1. 先聊聊条件逻辑:为什么if-else是程序里最绕不开的东西我做了这么多年开发,接手过从几万行到上百万行的老系统,说句实在话:代码里出现频率最高的控制结构,永远是if-else。别管你是写前端、后端、脚本还是算法题&…

2026/10/20 8:21:46

AI服务商选型失败率高企:从POC到合同的落地避坑指南

这个系列聊到第三篇,终于要触碰一个有点扎心的话题:AI服务商选型失败率。我在企业服务和技术咨询这边做了不少年头,复盘过形形色色的AI落地项目,一个非常残酷的事实是——大量项目早在选型阶段就已经埋下了失败的种子。某制造企业…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑