news 2026/9/3 23:35:54

AI+Stata实证研究:从选题到变量设计的自动化工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI+Stata实证研究:从选题到变量设计的自动化工作流

之前在做社科类研究时,经常卡在论文选题和变量查找环节,传统方法效率低且容易遗漏关键文献。本文将分享如何结合 AI Agent 与 Stata,利用 Codex 等工具高效锁定国社科、知网等权威平台的研究热点与数据,形成一套从“想法”到“可操作变量”的闭环工作流。无论你是经济学、社会学还是公共管理方向的研究生或青年学者,这套方法都能帮你快速启动实证研究。

1. 背景与核心概念:为什么需要“Agent+Stata+Codex”组合?

在实证研究,尤其是经济学、社会学、管理学等领域,论文的起点——选题与数据查找——往往是最耗时、最令人迷茫的阶段。传统的流程是:研究者基于个人兴趣或导师指点,手动在知网、Web of Science 等平台搜索关键词,浏览大量文献摘要来感知研究热点,然后再去查找对应的微观或宏观数据库,手动整理变量。这个过程不仅重复劳动多,而且视野容易受限,可能错过重要的交叉领域或新兴议题。

“Agent+Stata+Codex”的组合,正是为了系统化、智能化地解决这一痛点。我们来拆解一下这三个核心工具的角色:

  • AI Agent (智能体):在这里,Agent 并非指某个特定软件,而是一种工作范式。它指的是一个能够自主或半自主执行特定任务(如信息检索、数据整理、代码生成)的智能程序或工作流。在我们的场景中,我们可以构建一个“研究助理Agent”,它的任务是接收一个宽泛的研究方向(如“数字经济与就业”),然后自动去检索相关文献、分析高频关键词、并推荐可能的实证模型与变量。
  • Stata:这是实证社会科学研究中最主流的统计分析软件。它的核心作用是进行数据处理、统计分析和计量建模。我们最终的所有想法,都需要通过 Stata 的命令和程序来实现验证。因此,整个流程的终点是生成可运行的 Stata 代码或数据管理方案。
  • Codex:Codex 是 OpenAI 推出的一个AI模型,特别擅长将自然语言描述转化为代码。它最初以生成编程代码闻名,但其理解任务描述、进行文本分析和逻辑推理的能力,使其非常适合充当“研究助理Agent”的大脑。我们可以通过向 Codex 描述我们的研究想法,让它帮助我们生成文献检索策略、数据查找思路,甚至是初步的 Stata 代码框架。

简单来说,这个组合的协作逻辑是:你用自然语言向 Codex 描述你的初步想法 → Codex 扮演 Agent 的“大脑”,规划出文献检索、数据查找的路径 → 你根据这些路径执行,并将找到的数据用 Stata 进行处理和验证。这大大提升了从“想法”到“可执行研究”的转化效率。

2. 环境准备与工具说明

在开始实战之前,我们需要明确所使用的工具和替代方案。由于技术环境快速迭代,以下说明基于当前(请注意时效性)可用的稳定方案。

核心工具栈:

  1. AI 交互平台(替代 Codex 的直接调用)

    • OpenAI ChatGPT (GPT-4): 目前最易用且能力强大的通用模型,完全能够胜任 Codex 的代码生成和文本分析任务。我们将以它为主要工具进行演示。
    • 国内大模型平台(如 Kimi、DeepSeek、文心一言等):如果访问 OpenAI 服务不便,这些平台的代码生成和逻辑推理能力也已足够应对本研究场景。关键是学会如何清晰地提出需求。
    • 重要提示:我们不需要直接调用 Codex API,而是使用这些更易用的聊天界面或API。本文的“Codex”泛指此类具有代码生成和分析能力的AI模型。
  2. 学术检索平台

    • 中国知网 (CNKI):中文社科研究必备,用于查找中文文献、博硕士论文,分析国内研究热点。
    • 国家社科基金项目数据库:用于查找国社科立项项目,这是洞察官方资助研究前沿的绝佳窗口。
    • 其他数据库:如万方、维普、CSSCI 来源期刊目录等。
  3. 数据分析软件

    • Stata 17/18:建议使用较新版本,以获得更好的性能和更多内置命令。本文示例基于 Stata 17。
    • Python (可选但推荐):如果你需要进行更复杂的网络信息抓取(请注意合法合规与平台条款)或文本分析,Python 是强大的补充。我们将介绍思路,但不会深入复杂爬虫代码。
  4. 基础工作环境

    • 能够访问互联网的电脑。
    • 清晰的 research idea(哪怕只是一个模糊的方向)。

3. 核心工作流拆解:从模糊想法到清晰变量

整个流程可以分解为四个关键阶段,AI Agent(由大模型驱动)在其中扮演核心的“策略师”和“助理”角色。

3.1 阶段一:用 AI 发散思维,初步定题

当你只有一个模糊方向时,直接搜索往往无从下手。这时,让 AI 帮你进行头脑风暴。

操作示例:向 ChatGPT 提问

我正在构思一篇关于“数字经济”的实证经济学论文,但方向太宽泛。请你扮演一个经验丰富的社科研究助理,帮我完成以下任务: 1. 结合近三年(2021-2024)中国知网和国社科立项的热点,列举3-5个数字经济领域具体、新颖、可实证的研究子方向。 2. 针对每一个子方向,提供一个可能的核心研究问题(Research Question)。 3. 为每个研究问题,建议一个最常用的实证模型(例如,OLS, DID, IV, Probit等)并简述理由。

AI 可能给出的回答(摘要):

  1. 子方向:数字经济对制造业企业全球价值链攀升的影响。
    • 研究问题:数字技术应用是否以及如何促进了中国制造业企业向全球价值链中高端攀升?
    • 建议模型:面板数据固定效应模型。理由:可控制企业不随时间变化的个体特征,并分析数字技术投入与企业升级指标的因果关系。
  2. 子方向:数字普惠金融对农村家庭创业的效应研究。
    • 研究问题:数字普惠金融的发展是否显著提高了农村家庭的创业概率?其影响机制是什么?
    • 建议模型:Probit/Logit 模型(因变量为是否创业),并结合中介效应模型检验机制(如通过缓解信贷约束)。
  3. 子方向:地方政府数字治理能力与公共服务满意度。
    • 研究问题:地方政府的数字治理水平(如“一网通办”程度)是否提升了居民对公共服务的满意度?
    • 建议模型:多元线性回归(OLS)或有序Logit模型(如果满意度是等级数据)。可利用城市层面面板数据。

这一步的价值:AI 快速提供了结构化的选题思路,将“数字经济”这个宽泛概念,落地到了几个具有明确模型和数据的可研究点上。

3.2 阶段二:用 AI 规划文献与数据检索策略

选定一个子方向后(例如“数字普惠金融与农村创业”),下一步是查找相关文献和变量。让 AI 帮你制定精准的检索策略。

操作示例:向 ChatGPT 提问

我决定研究“数字普惠金融对农村家庭创业的效应研究”。请帮我制定一个详细的资料检索方案: 1. 【中文文献】给出在知网(CNKI)检索时,应使用的3组关键词组合(包括主题、篇关摘等检索字段建议),并说明每组组合的目的(如求全还是求准)。 2. 【立项情报】给出在国家社科基金项目数据库中,应如何检索来查看是否有类似立项,以及从中可以获取什么有用信息(如理论框架、变量测量)。 3. 【数据来源】列举可能包含“农村家庭创业”和“数字普惠金融”数据的2-3个中国公开微观数据库或宏观数据库,并说明其中可能的关键变量名称。

AI 可能给出的回答(摘要):

  1. 知网检索策略
    • 组合1(求全):SU=‘数字普惠金融’ AND SU=‘创业’ (检索所有相关文献)
    • 组合2(求准):TI=‘数字普惠金融’ AND KY=‘农村家庭’ AND (TI=‘创业’ OR KY=‘创业’) (聚焦高度相关文献)
    • 组合3(拓展):AB=‘互联网金融’ AND AB=‘农民创业’ (查找相近概念,避免遗漏)
  2. 国社科立项检索
    • 在项目数据库中使用“数字普惠金融”、“农村创业”、“家庭创业”等关键词进行检索。
    • 可获取信息:查看中标项目的题目、摘要、关键词,可以了解学界前沿认可的理论视角和研究方法;部分项目公示的“课题论证”部分可能包含详细的变量测量方案,极具参考价值。
  3. 数据来源建议
    • 中国家庭金融调查(CHFS):包含家庭创业状态、家庭资产收入等详细信息。需查找其问卷中关于“数字支付”、“互联网借贷”使用情况的模块。
    • 中国家庭追踪调查(CFPS):包含家庭经济、就业等信息。可关注其“信息技术使用”部分。
    • 北京大学数字普惠金融指数:这是区域层面的宏观数据,提供省、市、县级的数字金融覆盖广度、使用深度等指标,可与微观家庭数据匹配。

这一步的价值:AI 提供了一个清晰的“行动地图”,你不再需要盲目搜索,而是可以按图索骥,高效利用知网和国社科数据库。

3.3 阶段三:用 AI 解析文献,生成变量清单

在阅读了部分核心文献后,你需要整理出研究中涉及的变量。AI 可以帮助你快速梳理。

操作示例(假设你复制了一篇关键文献的摘要):

[将一篇关于数字普惠金融与创业的文献摘要粘贴给ChatGPT] 请根据上面这篇文献的摘要,帮我提取并整理以下信息: 1. 因变量(被解释变量):是什么,在数据库中可能如何测量?(例如,CFPS中是否为`entrepreneur`,取值0/1) 2. 核心自变量(解释变量):是什么,可能的数据来源或测量指标?(例如,使用“北京大学数字普惠金融指数”中的“使用深度”分指数) 3. 控制变量:文献中提到了哪些重要的控制变量?(例如,户主年龄、教育年限、家庭资产等) 4. 请将以上变量整理成一个表格,包含“变量类型”、“变量名(建议)”、“测量说明”、“可能的数据来源”四列。

这一步的价值:快速将冗长的文献信息结构化,形成你自己的变量设计表,为后续 Stata 数据准备打下坚实基础。

3.4 阶段四:用 AI 辅助 Stata 代码编写

当变量和数据源确定后,就可以开始着手 Stata 分析了。AI 可以帮你写出基础代码框架。

操作示例:向 ChatGPT 提问

我将使用CFPS2018数据研究数字普惠金融对农村家庭创业的影响。我的关键变量设想如下: - 因变量 `entrepreneur`: 是否创业(1=是,0=否),来自CFPS问题“是否从事个体经营或开办私营企业”。 - 核心自变量 `digital_finance`: 使用“北京大学数字普惠金融指数”中县级的使用深度指数,我需要将其与CFPS家庭数据按县代码合并。 - 控制变量:户主年龄(`age`)、教育年限(`edu`)、家庭净资产(`net_worth`)、是否拥有智能手机(`smartphone`)。 请帮我生成完成以下任务的Stata代码: 1. 导入CFPS家庭经济问卷数据(假设数据文件为`cfps2018fam.dta`)。 2. 生成因变量`entrepreneur`。 3. 清理控制变量(处理缺失值,对连续变量进行缩尾处理)。 4. 提示我如何准备并合并数字普惠金融指数数据(给出合并命令示例)。 5. 运行一个Probit模型,并输出边际效应。

AI 可能给出的 Stata 代码框架:

* 任务1 & 2: 导入数据并生成因变量 use "D:\Data\cfps2018fam.dta", clear * 假设创业状态变量名为 qq601,1表示是,5表示否,其他为缺失 gen entrepreneur = 1 if qq601 == 1 replace entrepreneur = 0 if qq601 == 5 label variable entrepreneur “是否创业” label define entrepreneur_lab 0 “否” 1 “是” label values entrepreneur entrepreneur_lab * 任务3: 清理控制变量 * 假设原始变量名:年龄(qa1age),教育年限(qe302),家庭净资产(fam_net_worth),智能手机(qp905) rename qa1age age rename qe302 edu rename fam_net_worth net_worth rename qp905 smartphone_raw * 处理智能手机变量 gen smartphone = (smartphone_raw == 1) if inlist(smartphone_raw, 1, 5) replace smartphone = . if missing(smartphone_raw) * 对连续变量进行1%水平的缩尾处理 winsor2 age edu net_worth, cuts(1 99) replace * 删除关键变量缺失的样本 drop if missing(entrepreneur, digital_finance, age, edu, net_worth, smartphone) * 任务4: 合并数字普惠金融指数(假设已处理为county2018.dta,包含 countyid 和 df_index) * 首先确保CFPS数据中有县级代码变量,假设为 countyid merge m:1 countyid using "D:\Data\county2018.dta" keep if _merge == 3 // 保留成功匹配的样本 drop _merge rename df_index digital_finance * 任务5: 运行Probit模型并计算边际效应 probit entrepreneur digital_finance age edu net_worth smartphone, vce(robust) margins, dydx(*) atmeans // 计算平均边际效应 est store m1 * 输出结果 outreg2 [m1] using “probit_results.doc”, replace word label // 使用outreg2输出到Word,需提前安装`ssc install outreg2`

这一步的价值:即使你不熟悉 Stata 的某些命令(如winsor2,merge,margins),AI 也能生成可运行的基础代码,你只需根据实际数据调整变量名和文件路径,极大降低了编程门槛。

4. 完整实战案例:基于CHFS数据的数字金融与创业研究

让我们整合以上所有阶段,完成一个简化的模拟实战。

4.1 研究主题确定

通过第一阶段与AI的讨论,我们确定研究主题为:数字支付使用对城乡家庭风险金融市场参与的影响研究

4.2 文献与数据检索策略制定

根据AI在第二阶段的建议:

  1. 在知网以“TI=‘数字支付’ AND KY=‘风险金融资产’”进行检索,精读高被引文献。
  2. 在国社科数据库检索“数字支付”、“家庭金融”,发现数项相关立项,参考其理论框架(如流动性约束缓解、信息获取渠道拓宽)。
  3. 确定使用中国家庭金融调查(CHFS)数据,因其包含详细的支付方式、金融资产信息。同时准备北京大学数字普惠金融指数作为区域层面控制变量。

4.3 变量设计与数据准备

基于文献和CHFS问卷,设计变量:

  • 因变量risk_finance(是否持有股票、基金、金融理财产品等风险金融资产,1=是,0=否)。
  • 核心自变量digital_pay(是否经常使用支付宝、微信支付等数字支付,1=是,0=否)。
  • 控制变量:户主年龄(age)、教育水平(edu_level)、家庭年收入(income)、家庭净资产(net_asset)、风险态度(risk_attitude)、所在城市数字金融发展水平(city_df_index)。

4.4 Stata 数据分析代码实现

以下是整合后的核心分析代码:

* 第一部分:数据准备与变量生成 use “chfs2019.dta”, clear * 1. 生成因变量:是否持有风险金融资产 gen risk_finance = (stock > 0 | fund > 0 | financial_product > 0) if !missing(stock, fund, financial_product) replace risk_finance = 0 if risk_finance == . label var risk_finance “持有风险金融资产” * 2. 生成核心自变量:是否经常使用数字支付 * 假设问卷中变量 pay_digital 表示使用频率,1=经常,2=有时,3=很少,4=从不 gen digital_pay = (pay_digital == 1) if !missing(pay_digital) label var digital_pay “经常使用数字支付” * 3. 处理控制变量 * 年龄、收入、资产取对数并缩尾 gen ln_income = ln(income + 1) gen ln_net_asset = ln(net_asset + 1) winsor2 age ln_income ln_net_asset, cuts(1 99) replace * 教育水平转为虚拟变量组(以初中及以下为参照组) tab edu_level, gen(edu_dum) * 风险态度(假设1-5分,分数越高越偏好风险) rename risk_attitude risk_pref * 4. 合并城市级数字金融指数 merge m:1 city_code using “city_digital_finance_index.dta” keep if _merge == 3 drop _merge rename df_index_city city_df_index * 第二部分:描述性统计与相关性分析 sum risk_finance digital_pay age ln_income ln_net_asset risk_pref city_df_index corr risk_finance digital_pay ln_income ln_net_asset risk_pref city_df_index * 第三部分:基准回归分析(Probit模型) probit risk_finance digital_pay age ln_income ln_net_asset risk_pref city_df_index edu_dum2 edu_dum3 edu_dum4, vce(cluster city_code) margins, dydx(*) atmeans est store m_base * 第四部分:稳健性检验(替换因变量测量方式) * 使用风险资产占总金融资产的比例作为连续因变量 gen risk_asset_ratio = (stock + fund + financial_product) / total_financial_asset if total_financial_asset > 0 replace risk_asset_ratio = 0 if missing(risk_asset_ratio) tobit risk_asset_ratio digital_pay age ln_income ln_net_asset risk_pref city_df_index edu_dum2-edu_dum4, ll(0) vce(cluster city_code) est store m_tobit * 第五部分:输出结果 outreg2 [m_base m_tobit] using “final_results.xls”, replace excel label // 将结果输出到Excel

4.5 结果解读与论文写作辅助

运行代码后,得到回归结果。你可以将关键统计结果(系数、标准误、显著性)再次喂给 AI,让它帮助你进行初步的学术化解读。

这是我的Probit模型回归结果的核心输出(边际效应): digital_pay: 系数0.045, 标准误0.012, p值0.000 ln_income: 系数0.032, 标准误0.005, p值0.000 ... 请根据这些结果,用规范的学术论文语言,撰写一段“实证结果分析”的小节内容,解释数字支付使用对家庭参与风险金融市场的影响。

AI 可以帮你生成如下的草稿: “实证结果表明,在控制户主特征、家庭经济状况、风险偏好及区域数字金融发展水平后,经常使用数字支付的家庭,其参与风险金融市场的概率平均显著高出4.5个百分点(在1%水平上显著)。这一发现支持了研究假设H1,即数字支付通过提升支付便利性、降低交易成本并增强金融信息触达,有效缓解了家庭参与金融市场的流动性约束与信息壁垒,从而促进了风险金融市场参与。此外,家庭收入与净资产对风险金融市场参与也具有显著正向影响,这与经典资产选择理论预期一致。”

5. 常见问题与排查思路

问题现象可能原因解决思路
AI 给出的选题方向过于宽泛或陈旧。提示词不够具体,未限定时间、地域或学科。在提问时增加约束,如“请结合2022-2024年中文CSSCI期刊文献”、“聚焦于中国县域层面”、“从社会学视角出发”。
在知网按AI建议的关键词搜不到足够文献。关键词翻译或表述不符合中文数据库习惯。让AI提供同义词、近义词或上下位概念。例如,将“Digital Governance”转化为“数字治理”、“智慧治理”、“政府数字化转型”等多组词尝试。
Stata 代码运行报错 “variable xxx not found”。数据中的实际变量名与代码中的变量名不一致。使用describecodebook命令查看数据集中所有变量名和标签,确保引用正确。AI生成的代码中的变量名需要你根据实际数据修改。
合并(merge)数据后样本量大量丢失。用于匹配的关键变量(如地区代码、ID)在不同数据集中格式不一致(字符型/数值型)或有空格等隐藏字符。合并前使用destringtostringtrim()等命令标准化关键变量格式。使用tab key_var分别查看两个数据集中的取值,确保匹配键一致。
回归结果不显著或符号与预期相反。1. 变量测量误差大;2. 遗漏重要控制变量;3. 存在严重的内生性问题(如反向因果)。1. 重新检查变量生成逻辑。2. 通过文献回顾,加入更多控制变量(如户籍、社会资本等)。3. 考虑使用工具变量法(IV)、倾向得分匹配(PSM)等解决内生性,并让AI帮助生成相应的Stata代码框架。
不知道如何将国社科立项信息转化为具体变量。对立项申请书的结构不熟悉。重点阅读立项公示中的“课题论证”部分(如有),里面通常有详细的理论框架、研究假设和变量设计图。将其描述输入AI,要求提炼出可操作的变量测量方案。

6. 最佳实践与高级技巧

  1. 迭代式提问:不要期望一次提问就得到完美答案。与AI的交互应是“提问-获得反馈-细化再提问”的迭代过程。例如,先要选题方向,再针对选定的方向要检索策略,然后针对找到的文献要变量列表。
  2. 交叉验证信息:AI可能生成虚构或不准确的数据库细节或变量名。对于关键信息(如数据库变量名、国社科项目编号),务必亲自到原始来源(数据库官网、问卷手册、基金网站)进行核实。
  3. 构建个人知识库:将每次与AI讨论得到的有效提示词(Prompt)、检索策略、有用的Stata代码片段保存下来,形成你自己的“研究效率工具箱”。例如,可以建立一个“文献综述Prompt模板”、“数据清理代码模板”。
  4. 理解而非复制代码:AI生成的Stata代码是很好的起点,但务必理解每一行命令的作用。遇到不熟悉的命令(如ivprobit,psmatch2),利用Stata的help命令或网络资源学习其原理和假设,确保方法适用。
  5. 关注数据伦理与合规:在使用任何数据,尤其是微观调查数据时,严格遵守数据使用协议。本文提到的所有数据获取和使用,均需在合法合规的前提下进行,尊重知识产权和隐私保护。
  6. Agent工作流的深化:对于高级用户,可以尝试将整个过程自动化。例如,用Python编写脚本,定期爬取(在遵守robots.txt和条款的前提下)国社科立项公告,用AI模型自动提取研究主题和关键词趋势;或者用Stata的python嵌入功能,直接在Stata中调用大模型API对变量描述进行智能分析。

7. 总结

通过“AI Agent(策略规划)+ 学术数据库(信息源)+ Stata(执行验证)”的三位一体工作流,社科实证研究的起步阶段得以系统性加速。本文演示了如何将模糊的研究想法,逐步转化为具体的选题、可检索的文献策略、可测量的变量以及可运行的Stata代码。这个流程的核心在于让人做最擅长的思考、判断与创新,而让AI和工具承担信息整合、策略规划和重复性编码的工作

掌握这套方法后,你可以将其灵活应用于不同的研究领域和主题。关键在于学会设计清晰的提示词(Prompt)来引导AI,并具备扎实的领域知识来鉴别和修正AI的输出。工具始终在进化,但研究者提出问题、设计检验方案、解释结果的核心能力,才是不可替代的价值所在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 23:35:06

Windows 部署 MinIO 全攻略:安装、集成与排错实战

简介:MinIO Windows 版资源包,面向需要快速搭建对象存储服务的开发者与运维人员,提供开箱即用的 minio.exe 服务端、mc 命令行客户端与执行脚本,适合在本地或私有云环境部署 Amazon S3 兼容存储,降低引入分布式存储的入…

作者头像 李华
网站建设 2026/9/3 23:33:47

TailSFT解析:聚焦尾部数据的监督微调如何提升强化学习效果

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

作者头像 李华
网站建设 2026/9/3 23:33:06

TCL真省电SE空调深度解析:新一级能效如何实现卧室静音省电

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

作者头像 李华
网站建设 2026/9/3 23:32:55

从航天飞机组合体分离看复杂系统部署的工程逻辑与故障应对

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

作者头像 李华
网站建设 2026/9/3 23:30:26

修复可用量调整现存量:用友BIP库存数据修正与模板导入导出

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

作者头像 李华
网站建设 2026/9/3 23:27:13

扫地机器人主控选型:STM32实时性与硬件设计实战指南

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

作者头像 李华