新闻详情

新闻详情

首页 / 资讯中心 / 详情

RESTplus静息态fMRI预处理全流程详解:参数配置与实战避坑指南

发布时间:2026/10/2 7:36:28来源:尧图网络
RESTplus静息态fMRI预处理全流程详解:参数配置与实战避坑指南
拿到一批静息态fMRI数据如果直接把预处理跳过去上来就提ALFF、ReHo或者功能连接那你大概率会得到一堆让你怀疑人生的结果——头动伪影、时间层错位、配准偏差全都会变成实实在在的假阳性。静息态fMRI预处理是整个脑影像分析链路里最基础、也最决定结果上限的环节这一步没做扎实后面统计做得再精美也站不住。RESTplus是目前国内神经影像圈用得最顺手的静息态预处理工具之一它是老牌工具DPARSF的继任者底层依赖MATLAB和SPM相当于把从时间层校正、头动校正、配准、平滑到协变量回归、滤波这一整套标准流水线做成了图形化配置界面。这篇文章我会从实际使用的角度把RESTplus做静息态fMRI预处理的完整流程完整过一遍说清楚每一步到底在做什么、参数为什么这么填以及我踩过的各种报错和排查经验。1. 静息态fMRI预处理到底在解决什么问题1.1 原始功能像为什么不能直接拿来用很多刚接触脑影像的人会想当然地认为扫描仪出来的数据已经足够干净静态分析只是选个时间窗口求平均。真实情况远没有这么省心。功能磁共振成像采集的根本不是一张完整的脑图而是先在每个时间点内分层扫描得到一组二维层面再把这些层面叠成三维体。这里的第一层问题是同一个时间点内的不同层面实际采集时刻并不完全相同。比方说一个TR是2秒、共33层的数据顶层和底层之间的采集时刻可以相差1.9秒而大脑的BOLD信号本身就在秒级波动这种时间差会导致同一时刻的信号被当成不同时刻来处理所以在做任何时间维度上的分析前先要把不同层面的采集时间校正到同一参考时刻这就是时间层校正。第二个问题来自被试本身。静息态扫描少则5分钟多则10分钟再配合的被试也不可能保持绝对不动。头部哪怕只是亚毫米级的移动都会改变体素和脑组织的对应关系更严重的还会在图像边缘产生明暗交替的伪影。第三个问题是个体差异每个人的脑大小、形状、沟回模式都不同如果不在一个共同的空间坐标系里做组分析统计结果根本没有可比性。最后还有一堆生理噪声和机器漂移心跳呼吸、扫描仪固有噪声、梯度不稳定都会混进信号里。预处理做的事情就是把这四类问题一一拆掉让留下来的信号尽量接近真实的神经活动。1.2 预处理在整条分析链路中的位置预处理的位置可以类比成做饭前的洗菜、切菜、备菜。原材料买回来以后不能直接下锅你得先清洗、去皮、改刀后面的炒菜、调味才有意义。在fMRI分析里扫描仪得到的是原始DICOM或NIfTI文件预处理之后得到的是干净的4D时间序列再往后才可以做功能连接、ALFF、ReHo、度中心性这些指标计算最后进入组间比较、相关分析等统计环节。很多人习惯把预处理当成一个交给软件跑就行了的步骤我建议趁早改掉这个想法。预处理里每一个参数都带有先验假设你填的层顺序对不对决定了时间层校正是否有效你选择的头动协变量模型直接决定有多少运动伪影被去掉你选的平滑核大小直接影响最终能检测到的激活或连接强度。正因为如此我经常跟周围同学说预处理不是流程里最容易的部分恰恰是最需要思考的部分。1.3 标准预处理流程总览RESTplus图形界面里那串勾选项实际上对应着一条成熟的静息态预处理标准流程。一般来说包括以下环节步骤英文名称主要目的关键参数去除前若干时间点Time Points Removal消除磁化稳定前的信号波动通常去掉前3~5个TR时间层校正Slice Timing把不同层面采集时间对齐TR、层数、层顺序头动校正Realign把各时间点图像对齐到参考空间刚体变换6参数配准Coregister功能像与结构像对齐互信息配准分割与标准化Normalize转换到MNI标准空间DARTEL/非线性变换协变量回归Nuisance Covariate Regression去除头动、白质脑脊液等干扰Friston 24参数、WM/CSF信号滤波Filter保留BOLD频段信号通常0.01~0.1 Hz带通去线性漂移Detrend去除扫描过程中的线性趋势一阶/高阶多项式平滑Smooth提高信噪比满足统计假设FWHM 4~8 mm需要说明的是不同分析指标对平滑、滤波的先后顺序有不同要求比如ALFF和ReHo对是否需要带通滤波、平滑核大小就有各自的推荐做法。我在下面第三节会针对RESTplus界面里的具体选项展开讲。2. 开工前的准备RESTplus环境配置与数据整理规范2.1 软件环境MATLAB、SPM12和RESTplus的搭配RESTplus不是一个独立运行的软件它跑在MATLAB环境下依赖SPM12提供的图像读写、配准、分割这些底层能力。安装顺序建议是先装MATLAB再装SPM12最后解压RESTplus并正确配置路径。MATLAB版本不要用太老的R2016b以下有些函数会缺也不要追求特别新的版本个别新版本对SPM12的兼容性会出现小毛病我自己现在用的是R2019b稳定跑了很久。SPM12建议直接去官方GitHub仓库拉最新发行版不要把网上流传的压缩包随便拿来用避免少文件或者版本混乱。RESTplus本身可以从官方GitHub仓库下载解压后目录里会有rest_*.m、dpabi等一堆脚本。启动方式很简单在MATLAB里把RESTplus目录加入路径包括子目录再输入restplus或dpabi打开主界面RESTplus就会自动拉起来。这里有个我自己常犯的低级错误只添加了RESTplus根目录没勾选子目录导致运行时报找不到函数rest_spm_api。解决办法是在配置路径时点添加到路径下面的包含子文件夹选项一次加对后面少很多麻烦。2.2 数据目录规范与DICOM转换扫描仪出来的原始数据往往是DICOM格式一个被试一个序列可能就有几百上千个dcm文件。RESTplus虽然能读DICOM但稳妥的做法是先用dcm2nii或MRIcroGL自带的转换工具把它转成统一的NIfTI格式再进行后续处理。转换的时候建议顺便看一眼图像方向信息是否完整有些老数据缺了qform/sform信息后面配准会报错。目录结构我习惯这么组织ProjectRoot/ 01_Sub001/ func/ Sub001_task-rest_run-1.nii anat/ Sub001_T1w.nii 02_Sub002/ func/ Sub002_task-rest_run-1.nii anat/ Sub002_T1w.nii有几个硬性规定值得留意路径和文件名不要带中文不要带空格不要用中文标点文件名长度不要太夸张同一个被试的功能像和结构像要分开放。RESTplus在处理时会自动匹配同级目录下的T1如果你的目录结构乱到它认不出来后面会反复报错消耗掉的耐心远大于一开始好好整理目录的时间。2.3 最容易被忽略的硬前提采集参数确认启动RESTplus之后第一个要填的界面组件就是TR、层数、层顺序。这三样不是靠猜的也不是从PPT上复制一下就行必须回到扫描序列本身确认。TR在DICOM或序列参数页里能找到单位通常是秒RESTplus里需要换算成秒比如2000 ms就填2。层数就是功能像的slice数量常见的有31、33、40、48等打开一个nii文件看第三维的层数就行。层顺序slice order是最容易搞错的一项。现在的EPI序列大多采用隔层采集也就是先采集1、3、5层再回来采2、4、6层这是为了避免相邻层面之间的射频干扰。但隔层采集还可以是升序、降序或者先采奇数层再采偶数层。填这一项时一定要找到扫描序列里写明SliceOrder的地方或者问中心的技术员。填错了时间层校正等于把信号时间关系引入了更大的偏差后面所有依赖于时间的指标都会受影响。这个坑我见过太多人踩包括我自己第一次独立处理数据时就填反过导致那批被试的ALFF结果整体都不对劲。3. RESTplus全流程实战每个参数背后的逻辑3.1 第一步去除前N个时间点RESTplus的界面里第一步会让你填Time Points相关设置也就是要从第几个时间点开始、用到底几个时间点。常规做法是去掉前3到5个TR。这是因为扫描启动的一瞬间磁场还没完全稳定梯度预热和射频激励都处于过渡状态前面几个时间点往往会出现很高的初始信号伪影。与此同时被试在听到扫描开始提示后也需要一个适应过程前几秒的焦虑和呼吸波动也可能混进去。实际操作中我一般默认去掉前5个时间点。这不会对统计效力造成可感知的影响却能显著减少初始不稳定带来的问题。如果你扫描的静息态序列总共只有120个时间点去掉5个后是115个对于低频波动分析完全够用但假设某个序列本身只有80个时间点再去掉5个就有点心疼了。这时候可以酌情只去前2~3个甚至在确认图像质量很好时只去前1个。参数没有绝对标准关键是你要说得清自己为什么这么选。3.2 时间层校正Slice Timing的完整填法时间层校正是RESTplus流程里第二个要处理的项目。它的意义我前面已经讲过这里是填法。在RESTplus的Slice Timing设置里需要填四项层数Slice Number、TRSeconds、参考层Reference Slice、层顺序Slice Order。层数和TR都是直接从序列参数来的不需要加工。参考层一般建议选时间序列中间的那个层面因为它在时间上居中与其他层面的最大时间差最小校正后的整体信号失真最小。RESTplus里参考层通常填一个代表层序号比如33层数据选第17层左右。层顺序的填写表达RESTplus支持好几种格式常见的有两种写法。如果是隔层升序采集即先采1、3、5...再采2、4、6...那Slice Order就写成1:2:33这种表达表示从1层开始步长为2。如果是隔层降序比如33层先采33、31、29...再采32、30、28...就要写成33:-2:1加32:-2:2这类两段式。如果序列是顺序采集就是1、2、3...一路扫到底那就填1:33。填完以后一定记得看一遍RESTplus预览出的序列示意确认跟你拿到的Scanner Slice Order一致再继续。3.3 头动校正为什么只用刚体变换头动校正在RESTplus里的选项写作Realign。它要做的事是把所有时间点的全脑图像对齐到第一个或平均时间点上用到的是刚体变换也就是3个平移参数加上3个旋转参数一共6个自由度。之所以只用刚体变换而不用带形变的仿射变换是因为头部作为一个整体在运动时脑组织本身不会发生明显的伸缩或剪切。换句话说各个时间点之间的差异主要来自位置和角度不需要引入额外的形状变化加多了参数反而容易把真实信号也一起校掉。RESTplus里常见的选项是选择Realign (Estimate Reslice)估计参数的同时对每个时间点图像做重采样。在头动校正完成后所有时间点图像的体素坐标就处于同一个参考空间里了。需要注意的一点是头动校正是整个预处理里最需要对结果进行人工检查的环节因为运动大到一定程度任何算法都救不回来。界面上会输出每个被试每个时间点的6个头动参数以及最大位移、最大旋转RESTplus还会生成头动图。一般公认的筛选线是平动不超过3mm、转动不超过3度超过这个范围的数据要么剔除要么结合SCRUBBING方法在后续回归中处理。我处理被试时凡是单次平移超过2.5mm的都会额外多看一眼前后时间点的图像。3.4 协变量回归白质脑脊液与Friston 24参数协变量回归是静息态预处理里最需要动脑子的环节。RESTplus里会要求你选择头动协变量模型、是否回归白质信号和脑脊液信号以及是否做全局信号回归。头动协变量的选择常见的有6参数、12参数和Friston 24参数。最简单的做法是把头动校正时估计到的6个参数直接当作回归变量但这忽略了一个事实头动带来的信号伪影往往存在滞后效应当前时间点的头动还会对后续1~2个时间点产生残余影响。Friston提出的24参数模型其实是在6个原始头动参数基础上加上它们各自的前一个时间点版本、以及所有参数的平方项共24列。用这个模型去回归能更彻底地移除与头动相关的方差。白质和脑脊液信号也要作为协变量回归掉因为这两个区域本身不含神经网络活动相关的BOLD信号却包含心跳、呼吸引起的生理噪声。具体做法是在配准后的图像上提取每个时间点的白质和脑脊液平均信号作为两个回归变量扔进模型。全局信号回归则是另一个有争议的话题支持者认为它能进一步去除非神经元相关的全局波动反对者担心它会引入幽灵相关产生本不存在的负相关结构。我的建议是如果你做的是静息态功能连接全局信号要不要回归最好在方法和结果里交代清楚并且可以做敏感性分析如果你做ALFF、ReHo这类局部指标一般不推荐回归全局信号。这个选择没有绝对正确但必须有依据、可复现。3.5 空间标准化EPI到T1再T1到MNI空间标准化就是把个体的脑图像变形到MNI标准空间这样不同被试的同一脑区才能对齐到同一坐标。RESTplus里这一步做的是两次配准的组合先把预处理后的EPI图像和个体自己的T1结构像做共配准Coregister再把T1结构像分割并配准到MNI模板最后把两次配准得到的变换合并得到EPI到MNI空间的重采样结果。为什么要绕这一圈因为EPI图像分辨率低、组织对比度差直接拿它跟MNI模板做非线性配准鲁棒性很差而T1图像分辨率高、解剖结构清晰先让EPI和T1对齐再利用T1做高精度的标准空间配准整个链条的精度会稳很多。RESTplus里提供了两种标准化策略一种是用SPM12默认的Segmentation Normalize速度快另一种是DARTEL它通过多次迭代构建个体间平均模板精度更高常用于VBM和精细形态学分析。对静息态fMRI来说用DARTEL的代价是时间和计算资源更高但换来的配准精度对组水平信号检测有实际好处。我自己的习惯是单被试快速预览时用默认Normalize正式跑批量时用DARTEL。重采样体素大小这一项一般推荐3mm等体素。2mm也能做但耗时翻倍而且对大多数静息态指标并没有带来实质提升。3.6 平滑与滤波频率窗口和空间核的选择滤波和平滑是RESTplus流程里的两项收尾操作但它们的生物学依据完全不同。静息态自发BOLD波动的能量主要集中在0.01到0.08 Hz这个极低频段高于0.1 Hz的成分主要来自呼吸、心跳这类生理干扰。带通滤波的作用是把这个频段保下来、滤掉其余噪声。RESTplus里常见的设置是低频0.01、高频0.1。如果你做的是ALFF分析ALFF本身是计算整个频段的振幅所以是否事先带通滤波要看具体软件实现但做功能连接时带通滤波几乎是标配。平滑则是用三维高斯核把图像做空间模糊目的是提高信噪比、减少个体间沟回差异、同时满足后续统计中对随机场理论的平滑假设。平滑核大小用FWHM表示常见取值是4mm和6mm也可以取采集voxel尺寸的1.5到2倍。需要记住的是平滑核越大空间分辨率损失越大平滑核太小则达不到降噪目的。对ReHo这种代表局部时间序列一致性的指标平滑尺寸不能太大否则会把邻近脑区的差异抹平推荐在6mm左右。对ALFF平滑核通常没有ReHo那么敏感。在RESTplus里这些选项都是图形界面直接勾选的但背后的取舍逻辑我建议每个人至少自己清楚表态一下而不是随手选个默认值。去线性漂移Detrend也建议打开因为长时间扫描里机器的基线漂移几乎必然存在用一阶多项式去除线性趋势是最稳妥的处理。4. 预处理结果检查与质控不会看结果就等于白做4.1 头动曲线和头动报告怎么看RESTplus在预处理完成后会在结果目录下生成每个被试的头动参数文件和报告。最简单实用的方法是把每个被试最大平移、最大旋转的数值列到一张表里过一遍。平移超过3mm、旋转超过3度的被试按标准应当考虑剔除或进行逐时间点剔除scrubbing。更高阶的判据是Power等人提出的FDFramewise Displacement把6个方向的逐时间点头动参数合成一个标量FD大于0.2mm或0.5mm的时间点会被标记出来。RESTplus输出的头动图中能看到这些逐时间点数值如果发现某个被试在某个时间段内FD持续超标最好把对应的时间窗口找出来看看是设备震动还是被试打瞌睡导致的身体滑动。我遇到的真实案例里有个被试整体头动均值很小但在一段1分钟左右的窗口内FD突然冲到0.8mm以上原因是在扫描中打了个喷嚏。像这种单段剧烈头动直接剔除整个时间序列太浪费就可以在回归里把FD超标的那些时间点作为额外回归变量或者做scrubbing把异常时间点及其邻近一两个点剔除之后再继续算指标。4.2 目视检查EPI与T1的配准是否靠谱预处理除了数值质控还需要肉眼检查。过程是这样打开预处理后的EPI图像再叠加显示被试自己的T1结构像两个图像应该严丝合缝。重点看几个容易被顶错的位置——额极、颞叶底部、小脑这些区域的变形最容易出问题。如果有明显的错位比如EPI里的小脑比T1里高出一截那说明Coregister步骤出了问题要回头检查T1和EPI的命名、方向矩阵、体素尺寸是不是一致。还有一种常见情况是T1头动太大或偏转太厉害导致配准失败这时候不只要看参数还要看时间序列里T1影像是否本身带运动伪影。标准化之后也一样可以打开标准化结果叠加到MNI模板上检查。正常结果是脑边界紧贴模板不会出现明显偏转或半边脑缺失。偷懒跳过这一道目视检查的下场往往是几个月后统计出异常回头排查发现某个被试配准明显失败却早就进了组分析。4.3 建立质控记录表预处理做得多了以后光靠脑子记不住每个被试的情况。我强烈建议每个项目维护一张质控记录表最少包含这些列被试编号、头动平均值、头动最大值、FD超标时间点占比、配准是否通过目视检查、是否剔除、剔除原因。这张表不仅能帮你在写Method部分时直接引用数据还能在后期审稿人质疑处理质量时快速给出证据。实际操作中我会用RESTplus输出目录下的报告自动整理大部分数值再人工补充目视检查的结果。一个批次几十个被试通常半小时到一小时内能完成质控。千万别轻视这半小时它能挡掉后面论文返工的大坑。5. 高频报错与排查实录这些坑我都替你踩过5.1 常见报错速查表报错现象常见原因解决办法MATLAB提示找不到RESTplus函数路径未包含子目录重新添加路径并勾选包含子文件夹Slice Timing报错slice order out of range层顺序填写的序号超过实际层数核对Slice Number和Slice Order是否匹配Coregister后功能像与T1明显错位EPI与T1的文件名或方向矩阵不一致用SPM的Check Reg查看两个图像方向统一坐标Normalize结果半边脑缺失T1方向矩阵错误或分割失败用dcm2nii重新转换T1检查qform/sform预处理中途报错Out of Memory内存溢出常见于DARTEL或大批量减少并行任务数或分批处理加大MATLAB内存分配头动结果显示全为零头动校正的实际输出没被正确读取在RESTplus结果目录下重新加载Report多个被试结果串线同时计算多个任务且输出目录混乱把不同任务放进独立项目目录避免共用工作目录表格里的每一项我都遇到过。DICOM转NIfTI时方向矩阵丢失是我早期掉进去最深的一个坑。当时一批被试的T1方向矩阵里全是正号导致分割和标准化全都偏了看起来像大脑被拧了一圈。后来我学乖了批量转完以后先随机抽几个被试用SPM的Display打开看一遍三个方向上的解剖朝向确认无误再进预处理。宁可多花10分钟也不要等全部跑完才追悔莫及。5.2 批量处理与并行选择的经验RESTplus支持批处理也就是把多个被试一次性跑完。我强烈建议分两步走先用一个完整的被试走通全流程参数调顺、结果目视检查通过再上批量。有人嫌麻烦一上来就用几十个被试的批量配置跑结果跑了一整夜之后发现Slice Order填错了全部作废重来。我当年第一次给课题组建分析流程时就吃过这种亏那天晚上看到第二天早上的报错信息心情可想而知。批处理时还有一个容易忽视的点并行计算。MATLAB本身可以开并行池RESTplus有的版本也支持并行。但并行任务导致的内存占用会成倍增长尤其在跑DARTEL或者同时处理三四十个被试时经常出现Out of Memory。我的经验是内存低于16GB的机器老老实实串行跑32GB以上可以开两个worker再高才建议开更多。运行过程中不时看一眼MATLAB工作区内存占用如果接近物理内存上限及时停掉改成串行效率反而更高。5.3 关于先滤波后回归和先回归后滤波的一点心得RESTplus的界面里协变量回归、滤波、去线性漂移的前后顺序是可以调整的。很多教程会直接告诉你选哪种但少有人解释为什么。我个人理解是如果先做协变量回归再做滤波头动和生理协变量在回归前包含了高频噪声回归时可能会把这些噪声方差一并吸收掉结果略微保守如果先滤波再做协变量回归则能避免低频段内的运动伪影被残留下来。国际上不同实验室的做法也不完全一致功能连接领域偏好在标准化后先回归再滤波ReHo和ALFF分析中也常见先滤波后回归的流程。这里我不想给出一个唯一正确答案而是建议你在论文方法里写清楚自己用了哪种顺序。只要你说明了你使用的具体流程和参数审稿人一般不会苛责。真正被批评的情况往往是方法部分写进行了常规预处理但完全没提滤波范围、平滑核尺寸、头动排除阈值让结果无法复现。RESTplus界面里通常会把每一步保存成脚本日志我每次跑完都会把日志里的关键参数复制进项目文档写方法时直接粘贴改改就是一段规范描述。最后再分享一个小技巧RESTplus跑完后除了得到预处理后的数据还能顺便勾选提取ROI时间序列、计算ALFF、ReHo、功能连接等指标。我建议第一批处理时不要贪多只输出预处理后的干净数据先做质控等批次内所有被试都通过检查后再批量计算指标。这样能避免一遍预处理就把大量计算时间浪费在质量不达标的数据上。预处理是慢活也是最不能省的活。参数的选择、质控的习惯、对每个报错背后原因的敏感度才是真正拉开分析水平差距的地方。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

人工智能训练师高级认证备考:从数据到模型上线的全链路攻略 2026/10/2 9:21:00

人工智能训练师高级认证备考:从数据到模型上线的全链路攻略

“人工智能训练师”这个认证,最近在朋友圈和招聘软件上出现的频率高到离谱。我身边一个做了两年数据标注的朋友都跑来问我,说三级(中级)刚拿到手,要不要趁热打铁冲一下高级。我翻了一下橙点同学平台上的高级考试题库&a…

阅读更多 →
从长Prompt到可复用技能:AI应用中的技能化封装实践指南 2026/10/2 9:21:00

从长Prompt到可复用技能:AI应用中的技能化封装实践指南

1. 项目概述:为什么我会把一个叫 skills 的东西当成正经项目来做先说个背景。我做 AI 应用落地已经有段时间了,早期跟大多数同行一样,核心工作是写 prompt、调 prompt、再写更长的 prompt。但很快发现一个尴尬的问题:同样的任务&a…

阅读更多 →
从零手搓AI工程:深入底层机制,构建可上生产的AI系统 2026/10/2 9:20:53

从零手搓AI工程:深入底层机制,构建可上生产的AI系统

1. 从零手搓AI工程:为什么我不建议你直接调包1.1 一个让我彻底改变学习路径的深夜事故去年冬天凌晨两点,我盯着屏幕上一条诡异的报错信息发呆。那是一个基于开源框架搭建的推荐系统,离线指标一切正常,上线后点击率却掉了三成。排查…

阅读更多 →
从提示词到技能包:AI编程助手Skills的安装、编写与实战指南 2026/10/2 9:20:53

从提示词到技能包:AI编程助手Skills的安装、编写与实战指南

AI 编程助手用到现在,我最大的感受是:模型本身的智商在快速拉平,真正拉开体验差距的,是你能不能把“经验、规范、流程”系统地交给它。这就是最近圈子里被反复讨论的 skills——你可以把它理解为 AI 助手的“职业技能包”。同一个…

阅读更多 →
Hindsight:开源浏览器取证工具,一键还原上网时间线 2026/10/2 9:20:53

Hindsight:开源浏览器取证工具,一键还原上网时间线

先说一个我干活时经常遇到的场景:接到一台“退役”电脑,要回答“这台机器在过去三个月里到底访问过哪些网站、下载过什么文件、在哪个时间点登录过什么账号”。如果只是打开浏览器翻“历史记录”,基本颗粒无收——真实的痕迹早就被分散存在一…

阅读更多 →
VMware虚拟机与宿主机文件共享全攻略:拖拽、共享文件夹与SMB详解 2026/10/2 9:20:53

VMware虚拟机与宿主机文件共享全攻略:拖拽、共享文件夹与SMB详解

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉