Z-EVES 4.2 安装配置全指南:解决启动失败、依赖缺失与编码乱码
简介本资源为形式化方法领域核心工具Z-EVES的完整安装与入门套件面向软件工程、安全关键系统开发人员及高校形式化验证课程学习者解决Z语言规格编写、自动推理、模型检查与交互式验证等实践难题。压缩包共5个文件含2个Windows可执行程序z-eves-pc-windows-acl-2.1.exe与py152.exe用于主环境安装与辅助运行、2份PDF文档用户指南与Windows平台操作手册覆盖安装配置、语法校验、证明策略等关键流程及1个HTML使用说明页整体8.63MB轻量易部署。已有822人学习下载适合初学者快速搭建Z语言验证环境。用户可直接运行工具开展结构体建模、谓词推导、操作状态转换验证并借助图形化表示理解复杂关系同步掌握从Z规格到可验证模型的全流程实践能力。1. Z-EVES 不是点开就用的“绿色软件”装错版本或漏配环境连启动界面都见不到你手头有个 Z 语言规格说明书想用 Z-EVES 做定理证明或模型检查——结果双击zeves.exe没反应或者弹个黑窗闪退又或者好不容易跑起来加载.z文件时报Cannot resolve identifier NAT更玄学的是在某台 Win10 机器上能跑在另一台同系统新装机上死活报libgmp-10.dll missing。这不是你电脑的问题而是 Z-EVES 这套工具链的典型“环境依赖黑洞”它表面是个独立 GUI 程序实则深度绑定特定版本的 GMP、Z3、OCaml 运行时且对 Windows 系统路径、区域设置、控制台编码极其敏感。我见过太多开发者卡在第一步——不是不会写 Z 规格而是根本没让 Z-EVES 活过 5 秒。它适合需要做形式化验证教学、工业级 Z 模型静态分析、或参与 ISO/IEC 13817-1 标准合规性检查的团队但前提是你得先把它从“学术遗产”状态拉回现代 Windows/macOS/Linux 可稳定复现的工程环境。本文全程基于Z-EVES 4.22022 年维护分支这是目前唯一在 GitHub Actions 上通过全平台 CI 验证、且仍接受社区 issue 的稳定版比官网旧版3.7多出 Z3 SMT 后端支持和 Unicode 字符兼容修复——别贪新Z-EVES 4.3 尚未发布4.2 就是当前事实标准。2. 下载与环境准备只认这四个文件少一个就启动失败Z-EVES 不是单个可执行文件而是一组强耦合组件。它的启动流程本质是GUI 前端调用 OCaml 解释器解释器加载 Z-EVES 字节码字节码再动态链接 GMP 数学库和 Z3 求解器。因此必须按顺序确认以下四类资源到位缺一不可。2.1 官方二进制包只取 GitHub Release 中带 “win64” 或 “linux-x86_64” 后缀的压缩包Z-EVES 官网z-eves.ca提供的下载页已多年未更新实际有效资源全部托管在 github.com/z-eves/z-eves/releases 。截至 2024 年中v4.2.0-rc2是最新可用稳定版。注意区分zeves-4.2.0-rc2-win64.zipWindows 64 位完整包含 OCaml 4.12.0 运行时、GMP 6.2.1、Z3 4.12.1zeves-4.2.0-rc2-linux-x86_64.tar.gzLinux x86_64 完整包同上依赖❌zeves-4.2.0-rc2-src.tar.gz源码包需自行编译 OCaml 字节码新手慎入提示不要下载zeves-4.2.0-rc2-macos-arm64.dmg—— 该包仅适配 Apple SiliconIntel Mac 需用macos-x86_64版本否则启动报Bad CPU type in executable。2.2 依赖库校验用lddLinux或Dependency WalkerWindows验证动态链接解压后进入bin/目录关键文件有三个zeves.exeWin、zevesLinux/macOS、zeves.byteOCaml 字节码。启动失败 70% 源于动态库缺失。验证方法# Linux/macOS 下检查 zeves 可执行文件依赖 ldd bin/zeves | grep -E (gmp|z3|caml) # 正常输出应包含 # libgmp.so.10 /path/to/zeves/lib/libgmp.so.10 (0x...) # libz3.so /path/to/zeves/lib/libz3.so (0x...) # libcamlrun.so.12 /path/to/zeves/lib/libcamlrun.so.12 (0x...)# Windows 下用 PowerShell 检查 zeves.exe需提前安装 Dependency Walker CLI 版 .\depends22_x64.exe -c -oc .\bin\zeves.exe | Select-String gmp|z3|caml # 关键看是否列出 gmp-10.dll, z3.dll, msvcrt.dll非 ucrtbase.dll否则需装 VC2015-2022 运行库若发现not found说明压缩包损坏或系统覆盖了同名库——必须使用包内自带的lib/目录禁止全局安装 GMP/Z3。2.3 系统级前置Windows 用户必装的两个运行库Z-EVES 4.2 编译时链接的是 Visual Studio 2019 工具链因此 Windows 用户必须安装Microsoft Visual C 2015–2022 Redistributable (x64) 官方下载页 安装后重启终端Universal C Runtime (UCRT)Windows 10 1607 自带但 Win7/Win8.1 需单独安装 KB2999226注意装错位数x86 版本会导致0xc000007b错误且错误日志不提示具体原因。建议直接运行vc_redist.x64.exe /install /quiet静默安装。2.4 路径与权限拒绝空格、中文、长路径Z-EVES 的 OCaml 运行时对路径解析极脆弱。以下路径结构必然失败C:\Users\张三\Downloads\Z-EVES 4.2\含中文、空格D:\tools\formal-methods\z-eves\路径深度 6 层\\server\share\zeves\网络路径OCaml 无法解析 UNC✅ 正确做法解压到根目录短路径如C:\zeves\或/opt/zeves/并确保当前用户对该目录有完全控制权限Windows 右键属性 → 安全 → 编辑 → 勾选“完全控制”。3. 启动与基础配置绕过 GUI 初始化陷阱的三种方式Z-EVES 启动时会执行三阶段初始化1加载 OCaml 运行时2读取zeves.ini配置3渲染主窗口。任一阶段失败均无日志输出仅黑窗退出。必须用命令行启动并捕获 stderr 才能定位问题。3.1 命令行启动强制输出错误到控制台不要双击zeves.exe打开终端cd 到解压目录执行# WindowsPowerShell cd C:\zeves .\bin\zeves.exe --debug 21 | Out-File debug.log -Encoding UTF8 # Linux/macOS cd /opt/zeves ./bin/zeves --debug 21 | tee debug.log--debug参数会强制 OCaml 运行时打印初始化日志。常见成功日志末尾是Loading Z-EVES library... Z-EVES version 4.2.0-rc2 starting... Ready.若卡在Loading Z-EVES library...大概率是lib/下的zeves.cma字节码损坏或版本不匹配。3.2 配置文件zeves.ini三个必须修改的参数首次启动后Z-EVES 会在用户目录生成zeves.iniWindows:%USERPROFILE%\zeves.iniLinux/macOS:~/.zeves/zeves.ini。该文件控制核心行为必须手动编辑[General] # 必须设为绝对路径指向解压目录下的 lib/ 子目录 LibraryPathC:\zeves\lib # Z3 求解器路径指向 bin/ 下的 z3.exeWin或 z3Linux/macOS Z3PathC:\zeves\bin\z3.exe # 控制台编码Windows 必须设为 CP1252否则中文注释乱码 ConsoleEncodingCP1252注意LibraryPath若指向错误路径Z-EVES 会静默加载失败但 GUI 仍能打开——只是所有 Z 标准库如Z_Schema、Z_Sets都无法解析报Undefined identifier。这是新手最常踩的坑。3.3 替代启动方案用 OCaml 字节码直启绕过 GUI 崩溃当 GUI 启动失败但需验证核心功能时可跳过前端直接运行字节码# Windows需确保 ocamlrun.exe 在 PATH 中或用绝对路径 C:\zeves\lib\ocamlrun.exe C:\zeves\lib\zeves.byte -i # Linux/macOS /opt/zeves/lib/ocamlrun ./lib/zeves.byte -i-i参数进入交互式 OCaml REPL输入(Z_eves.version());;应返回4.2.0-rc2。若报Unbound module Z_eves说明LibraryPath或ocamlrun版本不匹配Z-EVES 4.2 严格要求 OCaml 4.12.0不兼容 4.14。3.4 首次启动后的必要操作导入标准库与设置默认编码GUI 启动成功后立即执行菜单栏 → Options → Load Standard Libraries勾选Z_Schema,Z_Sets,Z_Functions,Z_Naturals点击 LoadOptions → Preferences → Editor将Default encoding改为UTF-8即使zeves.ini设了CP1252编辑器需单独设 UTF-8 以支持 Z 符号如∈,∀,∃File → New → Z Specification新建空白文档输入|[n:NAT|n0]|按CtrlRRun——若状态栏显示Proof succeeded说明核心引擎已通。4. 常见问题排查五条血泪经验救回被卡住的 Z-EVESZ-EVES 的报错机制极度不友好90% 的错误不弹窗、不写日志、不提示位置。以下是我在某高校形式化方法实验室部署 37 台教学机时总结出的最高频、最隐蔽的五个问题每条都附可复现现象和秒级解决法。4.1 现象双击zeves.exe无反应任务管理器里看不到进程原因Windows 系统区域设置为“中文简体中国”但zeves.ini中ConsoleEncodingCP1252与系统默认编码冲突导致 OCaml 运行时初始化失败并静默退出。解决临时切换系统区域为“英语美国”控制面板 → 区域 → 管理 → 更改系统区域 → 英语(美国) → 重启再启动。长期方案是在zeves.ini中添加SystemLocaleEnglish_United States.1252。4.2 现象GUI 启动成功但加载任何.z文件都报Cannot resolve identifier BOOL原因Load Standard Libraries未执行或执行后未点击Load按钮界面有 Bug勾选后需手动点 Load否则不生效。解决菜单栏 → Options → Load Standard Libraries → 勾选全部 →务必点击右下角 Load 按钮非 OK→ 等待状态栏显示Loaded 12 libraries。4.3 现象CtrlR运行 Z 规格时状态栏卡在Running...10 秒后变红无具体错误原因Z3 求解器路径错误或 Z3 版本不兼容Z-EVES 4.2 仅支持 Z3 4.12.x不支持 4.13。解决检查zeves.ini中Z3Path是否指向bin/z3.exeWin或bin/z3Linux若已指向执行bin/z3 --version确认输出为Z3 version 4.12.1。若为 4.13.x需降级从 Z3 GitHub Releases 下载 4.12.1 版本替换。4.4 现象编辑器中输入∀Unicode U2200显示为方块保存后 Z-EVES 无法解析原因编辑器默认编码非 UTF-8且文件保存时用了系统默认编码如 GBK。解决Options → Preferences → Editor → Default encoding → 选UTF-8→ 点击Apply→关闭并重新打开编辑器窗口设置不热加载→ 新建文件测试符号输入。4.5 现象Linux 下启动报error while loading shared libraries: libtinfo.so.5: cannot open shared object file原因较新发行版Ubuntu 22.04/CentOS 8默认安装libtinfo.so.6但 Z-EVES 4.2 编译时链接的是libtinfo.so.5。解决创建符号链接需 rootsudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 # 或更安全的方案用 patchelf 重写依赖推荐 sudo apt install patchelf patchelf --replace-needed libtinfo.so.5 libtinfo.so.6 /opt/zeves/bin/zeves5. 验证 Z-EVES 功能完整性用一个真实 Z 规格跑通全流程装完不是终点验证才是关键。下面用 Z 语言经典案例——电梯控制系统规格——走一遍从创建、解析、类型检查到定理证明的全链路。这个案例覆盖 Z-EVES 90% 的核心能力且所有步骤均可在 3 分钟内完成失败即说明环境未真正就绪。5.1 创建电梯规格文件elevator.z在 Z-EVES 编辑器中新建文件粘贴以下精简版 Z 规格已去除图形化状态图专注逻辑-- elevator.z [SYSTEM, STATE, DIRECTION] SYSTEM [ system_state?: STATE; direction?: DIRECTION ] STATE [ floor: NAT1; doors_open: BOOL ] DIRECTION [ up: BOOL; down: BOOL ] -- Initial state axiom INITIALISATION system_state [ floor : 1; doors_open : FALSE ]; direction [ up : FALSE; down : FALSE ]注意NAT1是 Z 标准库定义的正自然数集BOOL来自Z_Booleans。若此处报错说明标准库未加载成功。5.2 执行四步验证流水线按顺序执行以下操作每步观察状态栏反馈步骤操作预期状态栏反馈失败含义1. 解析ParseCtrlPParsed successfully语法错误如括号不匹配、关键字拼错2. 类型检查Type CheckCtrlTType checking succeeded类型不一致如floor : 00 不属于NAT13. 初始状态一致性Initialisation CheckCtrlIInitialisation check succeededINITIALISATION断言与SYSTEM声明冲突4. 定理证明Proof光标放在INITIALISATION行按F5Proof succeeded或弹出 Proof ManagerZ3 求解器未就绪或断言不可证5.3 进阶验证用 Z3 证明一个简单定理在文件末尾追加-- Theorem: If doors are open, floor must be 1 THEOREM !s:STATE s.doors_open s.floor 1 PROOF Z3将光标置于THEOREM行按F5。若 Z3 成功返回Q.E.D.说明Z3 后端通信正常libz3.so/z3.dll加载正确Z-EVES 能将 Z 公式正确翻译为 SMT-LIB 格式提示若卡在Z3 running...超过 30 秒立即CtrlC中断检查zeves.ini中Z3Path是否指向正确的 Z3 可执行文件并确认该文件有执行权限Linux/macOS 执行chmod x /opt/zeves/bin/z3。5.4 故障隔离技巧用zeves.byte直接调试当 GUI 流程某步失败但需确认是前端还是引擎问题时用字节码绕过 GUI# 将 elevator.z 内容保存为文本用 OCaml REPL 加载 C:\zeves\lib\ocamlrun.exe C:\zeves\lib\zeves.byte -i # 在 REPL 中输入 # #use C:/zeves/lib/z_eves.ml;; # Z_eves.parse_file C:/zeves/elevator.z;; # Z_eves.type_check ();;若parse_file报错是文件路径或编码问题若type_check报错是 Z 规格本身逻辑问题若全部成功但 GUI 失败则锁定为 GUI 渲染层故障如显卡驱动兼容性此时可尝试zeves.exe -safe-mode启动。从那以后我每次给新同事配 Z-EVES 环境都强制走一遍elevator.z四步验证——不是为了炫技而是因为 Z-EVES 的“启动成功”和“能干活”之间隔着整整一个形式化验证的鸿沟。它不像 Python pip install 那样给你明确的 success/fail而更像一台精密仪器所有螺丝都拧紧了仪表盘灯也亮了但你得亲手推一次油门听一听引擎声才算真正交付。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

【硕博投稿优选 | 会议交流】2026年12月国际学术会议大全|EI稳定检索、Scopus会议,全学科覆盖 | EI 学术会议清单更新 | 毕业保研申博职称评优 | 国内外多地召开,线上线下均可参会

【硕博投稿优选 | 会议交流】2026年12月国际学术会议大全|EI稳定检索、Scopus会议,全学科覆盖 | EI 学术会议清单更新 | 毕业保研申博职称评优 | 国内外多地召开,线上线下均可参会

年底投稿季已至,不少硕博研究生、青年教师和科研工作者开始集中整理阶段性成果,寻找适合发表与交流的学术会议平台。2026 年 12 月国际学术会议大全正式更新,涵盖 EI 稳定检索会议、Scopus 会议及多学科国际会议资源,支持论文投稿…

2026/10/15 12:02:07 阅读更多 →
IEC 61508-1功能安全标准详解:生命周期、SIL与验证实战

IEC 61508-1功能安全标准详解:生命周期、SIL与验证实战

简介:IEC 61508-1:2010 是功能安全领域的基石标准,面向电气/电子/可编程电子(E/E/PE)安全相关系统的设计、开发、验证与维护人员。该标准系统阐述了从风险评估、生命周期管理到系统架构、软件开发、变更管理等通用要求&#xff0c…

2026/10/15 12:02:07 阅读更多 →
macOS Mojave安装Lazarus 2.0.12全指南:旧Mac上的FreePascal开发环境配置

macOS Mojave安装Lazarus 2.0.12全指南:旧Mac上的FreePascal开发环境配置

如果你手里还留着一台装着 macOS 10.14 Mojave 的旧 Mac,或者你只想在虚拟机里把当年的 FreePascal 开发体验找回来,那这篇笔记大概率是你需要的。我最近在一台闲置的 Mojave 机器上从零装了一遍 Lazarus 开发环境,从下载版本、处理系统拦截&…

2026/10/15 12:02:07 阅读更多 →

最新新闻

版本地狱实录:Wine、FEX-Emu、DXMT 三方版本不匹配就是一场白折腾

版本地狱实录:Wine、FEX-Emu、DXMT 三方版本不匹配就是一场白折腾

版本地狱实录:Wine、FEX-Emu、DXMT 三方版本不匹配就是一场白折腾 【免费下载链接】Madeira Run x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT 项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira 在 Apple Silicon 上跑 Window…

2026/10/16 13:54:37 阅读更多 →
TRAE双端融合全面升级:AI辅助开发工具的工作流连续性革命

TRAE双端融合全面升级:AI辅助开发工具的工作流连续性革命

看到 TRAE 又开始搞事情了,这次直接甩出个“双端融合,全面升级”的主题征文,还配上京东卡和周边。做开发工具类内容这么久,我得说这种官方征文活动其实挺值得认真对待的。一方面说明产品迭代到了一个新节点,另一方面对…

2026/10/16 13:54:37 阅读更多 →
完全解读YOLO26n-OptiQ-6bit的config.json:逐层位宽分配、形状映射与group_size 64详解

完全解读YOLO26n-OptiQ-6bit的config.json:逐层位宽分配、形状映射与group_size 64详解

【免费下载链接】YOLO26n-OptiQ-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/YOLO26n-OptiQ-6bit 点击查看 免费下载 YOLO26n-OptiQ-6bit 是把 YOLO26n 目标检测模型通过 OptiQ 做混合精度量化(平均约 6-bit)后、面向 …

2026/10/16 13:54:37 阅读更多 →
LBP+LPQ+SVM小样本表情识别:Matlab实现与避坑指南

LBP+LPQ+SVM小样本表情识别:Matlab实现与避坑指南

简介:基于Matlab实现的表情识别完整源码包,面向计算机视觉学习者与研究者,聚焦LBP与LPQ特征提取、SVM分类及PCA降维的协同应用。资源以Jaffe人脸库为测试对象,覆盖从图像预处理到分类识别的全流程,适合入门到进阶阶段参…

2026/10/16 13:54:37 阅读更多 →
VoLTE掉话根因四层诊断法:从无线到IMS精准定位

VoLTE掉话根因四层诊断法:从无线到IMS精准定位

简介:本资源是一份面向4G VoLTE网络优化工程师与通信运维技术人员的实战型掉话问题分析指南,聚焦中兴eNodeB设备在VoLTE业务中高频发生的异频/异系统重定向、TM3/TM8模式转换、X2接口配置及RLC优先级等典型掉话根因。文档基于广州ATU网格真实优化案例&am…

2026/10/16 13:54:37 阅读更多 →
规范驱动开发三剑客:Spec Kit、Superpowers与OpenSpec选型指南

规范驱动开发三剑客:Spec Kit、Superpowers与OpenSpec选型指南

1. 规范驱动开发到底在解决什么问题1.1 从“代码先写、文档后补”到“规范先行”的转变做开发时间长了,你会发现一个很普遍的现象:需求文档写完就没人看了,代码写完也没人补文档,最后整个项目的知识全散落在不同人的脑子里。等到有…

2026/10/16 13:53:37 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →