[{"data":1,"prerenderedAt":2152},["ShallowReactive",2],{"post:\u002Fposts\u002Fmarkdown\u002Fmdc-tutorial":3,"posts:catalog":1888},{"id":4,"title":5,"aiSummary":6,"audio":7,"body":8,"categories":1870,"cover":7,"description":1872,"extension":183,"meta":1873,"navigation":6,"path":1874,"pin":1875,"publish":1876,"seo":1877,"series":1871,"seriesOrder":198,"stem":1878,"summary":7,"summarySource":1879,"tags":1880,"theme":1883,"update":1884,"wip":1885,"wordCount":1886,"__hash__":1887},"posts\u002Fposts\u002F1.markdown\u002F02.mdc-tutorial.md","MDC 教程",true,null,{"type":9,"value":10,"toc":1842},"minimark",[11,23,43,48,134,137,152,155,166,173,178,250,255,271,282,285,295,299,337,341,346,351,358,385,391,397,401,408,412,415,434,437,441,448,490,493,508,522,525,528,535,545,590,597,814,825,837,840,843,847,902,906,920,923,926,933,937,956,960,967,973,979,998,1001,1005,1009,1017,1021,1093,1098,1153,1208,1211,1213,1220,1224,1282,1286,1319,1322,1325,1390,1393,1396,1400,1425,1429,1437,1440,1447,1470,1473,1502,1505,1509,1519,1523,1537,1541,1545,1548,1558,1561,1571,1598,1609,1612,1618,1622,1665,1669,1680,1690,1731,1743,1746,1761,1776,1779,1783,1805,1809,1820,1824,1827,1831,1838],[12,13,14,15,22],"p",{},"MDC（Markdown Components）让 Markdown 可以使用 Vue 组件。普通段落、列表和代码块保持原有写法，组件则负责承载属性、插槽和交互。语法基础见 ",[16,17,21],"a",{"href":18,"rel":19},"https:\u002F\u002Fcontent.nuxt.com\u002Fdocs\u002Ffiles\u002Fmarkdown#mdc-syntax",[20],"nofollow","Nuxt Content 的 MDC 文档","。",[12,24,25,26,30,31,42],{},"本站通过 Nuxt Content 读取 ",[27,28,29],"code",{},".md"," 文件，MDC 语法直接写在同一个文件中，",[32,33,34,35,38,39],"strong",{},"无需改成 ",[27,36,37],{},".mdc"," 或 ",[27,40,41],{},".mdx","。本文中的原生元素、数据绑定、正文图片预览与代码组可以直接查看效果；教学用自定义组件仍会注明接入条件。",[44,45,47],"h2",{"id":46},"markdownmdc-与组件","Markdown、MDC 与组件",[49,50,51,67],"table",{},[52,53,54],"thead",{},[55,56,57,61,64],"tr",{},[58,59,60],"th",{},"写法",[58,62,63],{},"用途",[58,65,66],{},"使用条件",[68,69,70,82,92,102,113,124],"tbody",{},[55,71,72,76,79],{},[73,74,75],"td",{},"Markdown",[73,77,78],{},"段落、标题、列表、图片和代码块",[73,80,81],{},"当前可用",[55,83,84,87,90],{},[73,85,86],{},"MDC 属性和容器",[73,88,89],{},"给内容添加属性，用容器组织 Markdown",[73,91,81],{},[55,93,94,97,100],{},[73,95,96],{},"MDC 数据绑定",[73,98,99],{},"在正文引用文章数据",[73,101,81],{},[55,103,104,107,110],{},[73,105,106],{},"MDC 自定义组件",[73,108,109],{},"使用组件属性、插槽和交互",[73,111,112],{},"需要对应 Vue 组件",[55,114,115,118,121],{},[73,116,117],{},"代码组",[73,119,120],{},"在多个代码片段之间切换",[73,122,123],{},"本站已接入",[55,125,126,129,132],{},[73,127,128],{},"折叠块",[73,130,131],{},"收起补充内容，支持嵌套和锚点定位",[73,133,123],{},[12,135,136],{},"MDC 面向 Vue 组件，不使用 MDX 的 JSX 导入写法。组件名本身不会创建功能：在文章中写一个名称之前，需要先确认站点提供了对应组件。",[12,138,139,140,143,144,147,148,22],{},"本站的 ",[27,141,142],{},"::collapse{title=\"展开说明\"}"," 默认收起，",[27,145,146],{},":open=\"true\""," 可初始展开，详见",[16,149,151],{"href":150},"\u002Fposts\u002Fmarkdown\u002Fcollapse","折叠内容用法与示例",[44,153,154],{"id":154},"块级语法",[12,156,157,158,161,162,165],{},"块级容器以 ",[27,159,160],{},"::名称"," 开始，以单独一行 ",[27,163,164],{},"::"," 结束。里面可以继续写 Markdown，容器与周围正文之间保留空行。容器内最后一段是列表时，在结束标记前也留一个空行。",[12,167,168,169,172],{},"下面使用原生 ",[27,170,171],{},"div","，因此不依赖额外组件。",[12,174,175],{},[32,176,177],{},"源码",[179,180,185],"pre",{"className":181,"code":182,"language":183,"meta":184,"style":184},"language-md shiki shiki-themes catppuccin-mocha catppuccin-latte","::div\n这里是容器内的 **Markdown 内容**。\n\n- 标题来自文章 Meta。\n- 正文继续使用 Markdown。\n\n::\n","md","",[27,186,187,196,215,221,231,239,244],{"__ignoreMap":184},[188,189,192],"span",{"class":190,"line":191},"line",1,[188,193,195],{"class":194},"szT_X","::div\n",[188,197,199,202,206,210,212],{"class":190,"line":198},2,[188,200,201],{"class":194},"这里是容器内的 ",[188,203,205],{"class":204},"sxk1D","**",[188,207,209],{"class":208},"sIG05","Markdown 内容",[188,211,205],{"class":204},[188,213,214],{"class":194},"。\n",[188,216,218],{"class":190,"line":217},3,[188,219,220],{"emptyLinePlaceholder":6},"\n",[188,222,224,228],{"class":190,"line":223},4,[188,225,227],{"class":226},"siJSA","-",[188,229,230],{"class":194}," 标题来自文章 Meta。\n",[188,232,234,236],{"class":190,"line":233},5,[188,235,227],{"class":226},[188,237,238],{"class":194}," 正文继续使用 Markdown。\n",[188,240,242],{"class":190,"line":241},6,[188,243,220],{"emptyLinePlaceholder":6},[188,245,247],{"class":190,"line":246},7,[188,248,249],{"class":194},"::\n",[12,251,252],{},[32,253,254],{},"效果",[171,256,257,261],{},[12,258,201,259,22],{},[32,260,209],{},[262,263,264,268],"ul",{},[265,266,267],"li",{},"标题来自文章 Meta。",[265,269,270],{},"正文继续使用 Markdown。",[12,272,273,274,277,278,281],{},"如果有一个已注册的 ",[27,275,276],{},"ExamplePanel.vue","，可以用 ",[27,279,280],{},"::example-panel"," 调用它。这个名称只是下文的教学示例，当前项目没有安装该组件。",[44,283,284],{"id":284},"行内语法与属性",[12,286,287,288,291,292,22],{},"行内组件使用一个冒号，例如 ",[27,289,290],{},":span[文字]","，在前面保留空格以分隔正文。仅需给一段文字添加属性时，可以使用 ",[27,293,294],{},"[文字]{属性}",[12,296,297],{},[32,298,177],{},[179,300,302],{"className":181,"code":301,"language":183,"meta":184,"style":184},"当前示例： :span[已校对]。\n\n[把指针放在这段文字上]{title=\"这是通过 MDC 设置的 title 属性\"}。\n",[27,303,304,321,325],{"__ignoreMap":184},[188,305,306,309,313,316,319],{"class":190,"line":191},[188,307,308],{"class":194},"当前示例： :span",[188,310,312],{"class":311},"s9ZOB","[",[188,314,315],{"class":311},"已校对",[188,317,318],{"class":311},"]",[188,320,214],{"class":194},[188,322,323],{"class":190,"line":198},[188,324,220],{"emptyLinePlaceholder":6},[188,326,327,329,332,334],{"class":190,"line":217},[188,328,312],{"class":311},[188,330,331],{"class":311},"把指针放在这段文字上",[188,333,318],{"class":311},[188,335,336],{"class":194},"{title=\"这是通过 MDC 设置的 title 属性\"}。\n",[12,338,339],{},[32,340,254],{},[12,342,343,344,22],{},"当前示例： ",[188,345,315],{},[12,347,348,22],{},[188,349,331],{"title":350},"这是通过 MDC 设置的 title 属性",[12,352,353,354,357],{},"链接、图片、强调和行内代码也可以带属性。以下链接通过 ",[27,355,356],{},"target"," 指定在新标签页打开。",[179,359,361],{"className":181,"code":360,"language":183,"meta":184,"style":184},"[Nuxt Content](https:\u002F\u002Fcontent.nuxt.com){target=\"_blank\"}\n",[27,362,363],{"__ignoreMap":184},[188,364,365,367,370,372,375,379,382],{"class":190,"line":191},[188,366,312],{"class":311},[188,368,369],{"class":311},"Nuxt Content",[188,371,318],{"class":311},[188,373,374],{"class":204},"(",[188,376,378],{"class":377},"sZBvu","https:\u002F\u002Fcontent.nuxt.com",[188,380,381],{"class":204},")",[188,383,384],{"class":194},"{target=\"_blank\"}\n",[12,386,387],{},[16,388,369],{"href":378,"rel":389,"target":390},[20],"_blank",[12,392,393,396],{},[27,394,395],{},"{.类名 #标识符}"," 可以指定 class 和 id；class 对应的样式仍须由站点提供，不能仅凭名称产生效果。",[44,398,400],{"id":399},"给组件传递-props","给组件传递 Props",[12,402,403,404,407],{},"Props 是组件接收的参数。以下示例都假设已经注册了 ",[27,405,406],{},"ExamplePanel","，只展示源代码。",[409,410,411],"h3",{"id":411},"行内参数",[12,413,414],{},"参数少时，可以直接放在花括号中：",[179,416,418],{"className":181,"code":417,"language":183,"meta":184,"style":184},"::example-panel{title=\"环境要求\"}\n请先确认项目的运行环境。\n::\n",[27,419,420,425,430],{"__ignoreMap":184},[188,421,422],{"class":190,"line":191},[188,423,424],{"class":194},"::example-panel{title=\"环境要求\"}\n",[188,426,427],{"class":190,"line":198},[188,428,429],{"class":194},"请先确认项目的运行环境。\n",[188,431,432],{"class":190,"line":217},[188,433,249],{"class":194},[12,435,436],{},"字符串使用引号包裹。数值、布尔值、数组和对象应使用组件声明的类型；复杂数据可以使用 YAML 参数块，或使用冒号前缀传入 JSON。",[409,438,440],{"id":439},"yaml-参数块","YAML 参数块",[12,442,443,444,447],{},"参数较多时，将它们写在组件开头的两行 ",[27,445,446],{},"---"," 之间。这一块只属于当前组件，与文件顶部的文章 Meta 分开。",[179,449,451],{"className":181,"code":450,"language":183,"meta":184,"style":184},"::example-panel\n---\n\ntitle: 环境要求\n---\n\n请先确认项目的运行环境。\n::\n",[27,452,453,458,464,468,473,477,481,485],{"__ignoreMap":184},[188,454,455],{"class":190,"line":191},[188,456,457],{"class":194},"::example-panel\n",[188,459,460],{"class":190,"line":198},[188,461,463],{"class":462},"s_wmW","---\n",[188,465,466],{"class":190,"line":217},[188,467,220],{"emptyLinePlaceholder":6},[188,469,470],{"class":190,"line":223},[188,471,472],{"class":194},"title: 环境要求\n",[188,474,475],{"class":190,"line":233},[188,476,463],{"class":462},[188,478,479],{"class":190,"line":241},[188,480,220],{"emptyLinePlaceholder":6},[188,482,483],{"class":190,"line":246},[188,484,429],{"class":194},[188,486,488],{"class":190,"line":487},8,[188,489,249],{"class":194},[409,491,492],{"id":492},"数组与对象",[12,494,495,496,499,500,503,504,507],{},"下面用假设的 ",[27,497,498],{},"ExampleList"," 展示结构化参数。它需要声明并处理相应的 ",[27,501,502],{},"items"," 和 ",[27,505,506],{},"options"," Props。",[179,509,511],{"className":181,"code":510,"language":183,"meta":184,"style":184},"::example-list{:items='[\"Markdown\", \"MDC\"]' :options='{\"compact\": true}'}\n::\n",[27,512,513,518],{"__ignoreMap":184},[188,514,515],{"class":190,"line":191},[188,516,517],{"class":194},"::example-list{:items='[\"Markdown\", \"MDC\"]' :options='{\"compact\": true}'}\n",[188,519,520],{"class":190,"line":198},[188,521,249],{"class":194},[12,523,524],{},"带冒号的属性可以解析 JSON，因此外层用单引号，JSON 字符串内部保留双引号。属性值的最终类型应与组件定义一致。",[44,526,527],{"id":527},"默认插槽与具名插槽",[12,529,530,531,534],{},"默认插槽承载组件内的主要内容；具名插槽用 ",[27,532,533],{},"#插槽名"," 切分不同区域。插槽标记属于组件内部，不是普通章节标题。",[12,536,537,538,540,541,544],{},"下面的 ",[27,539,406],{}," 使用默认插槽和 ",[27,542,543],{},"footer"," 插槽：",[179,546,548],{"className":181,"code":547,"language":183,"meta":184,"style":184},"::example-panel{title=\"发布检查\"}\n请确认图片和链接可以正常访问。\n\n#footer\n[阅读 Markdown 教程](\u002Fposts\u002Fmarkdown\u002Fmarkdown)\n::\n",[27,549,550,555,560,564,569,586],{"__ignoreMap":184},[188,551,552],{"class":190,"line":191},[188,553,554],{"class":194},"::example-panel{title=\"发布检查\"}\n",[188,556,557],{"class":190,"line":198},[188,558,559],{"class":194},"请确认图片和链接可以正常访问。\n",[188,561,562],{"class":190,"line":217},[188,563,220],{"emptyLinePlaceholder":6},[188,565,566],{"class":190,"line":223},[188,567,568],{"class":194},"#footer\n",[188,570,571,573,576,578,580,583],{"class":190,"line":233},[188,572,312],{"class":311},[188,574,575],{"class":311},"阅读 Markdown 教程",[188,577,318],{"class":311},[188,579,374],{"class":204},[188,581,582],{"class":377},"\u002Fposts\u002Fmarkdown\u002Fmarkdown",[188,584,585],{"class":204},")\n",[188,587,588],{"class":190,"line":241},[188,589,249],{"class":194},[12,591,592,593,596],{},"若要自行接入这个教学组件，可以创建 ",[27,594,595],{},"apps\u002Fwebsite\u002Fapp\u002Fcomponents\u002Fcontent\u002FExamplePanel.vue","，参考以下实现：",[179,598,602],{"className":599,"code":600,"language":601,"meta":184,"style":184},"language-vue shiki shiki-themes catppuccin-mocha catppuccin-latte","\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{ title: string }>();\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Csection class=\"my-6 border border-line rounded-xl bg-surface p-5\">\n    \u003Cp class=\"text-heading font-semibold\">{{ title }}\u003C\u002Fp>\n    \u003Cslot \u002F>\n    \u003Cfooter v-if=\"$slots.footer\" class=\"mt-4 border-t border-line pt-4\">\n      \u003Cslot name=\"footer\" \u002F>\n    \u003C\u002Ffooter>\n  \u003C\u002Fsection>\n\u003C\u002Ftemplate>\n","vue",[27,603,604,629,664,673,677,686,704,729,741,765,785,795,805],{"__ignoreMap":184},[188,605,606,609,612,616,619,622,626],{"class":190,"line":191},[188,607,608],{"class":226},"\u003C",[188,610,611],{"class":377},"script",[188,613,615],{"class":614},"sIs8M"," setup",[188,617,618],{"class":614}," lang",[188,620,621],{"class":226},"=",[188,623,625],{"class":624},"ssZzq","\"ts\"",[188,627,628],{"class":226},">\n",[188,630,631,635,638,641,645,648,652,655,658,661],{"class":190,"line":198},[188,632,634],{"class":633},"s3Fsb","defineProps",[188,636,608],{"class":637},"s0AGO",[188,639,640],{"class":204},"{",[188,642,644],{"class":643},"sY22P"," title",[188,646,647],{"class":226},":",[188,649,651],{"class":650},"sDkzg"," string",[188,653,654],{"class":204}," }",[188,656,657],{"class":637},">",[188,659,660],{"class":194},"()",[188,662,663],{"class":204},";\n",[188,665,666,669,671],{"class":190,"line":217},[188,667,668],{"class":226},"\u003C\u002F",[188,670,611],{"class":377},[188,672,628],{"class":226},[188,674,675],{"class":190,"line":223},[188,676,220],{"emptyLinePlaceholder":6},[188,678,679,681,684],{"class":190,"line":233},[188,680,608],{"class":226},[188,682,683],{"class":377},"template",[188,685,628],{"class":226},[188,687,688,691,694,697,699,702],{"class":190,"line":241},[188,689,690],{"class":226},"  \u003C",[188,692,693],{"class":377},"section",[188,695,696],{"class":614}," class",[188,698,621],{"class":226},[188,700,701],{"class":624},"\"my-6 border border-line rounded-xl bg-surface p-5\"",[188,703,628],{"class":226},[188,705,706,709,711,713,715,718,720,723,725,727],{"class":190,"line":246},[188,707,708],{"class":226},"    \u003C",[188,710,12],{"class":377},[188,712,696],{"class":614},[188,714,621],{"class":226},[188,716,717],{"class":624},"\"text-heading font-semibold\"",[188,719,657],{"class":226},[188,721,722],{"class":194},"{{ title }}",[188,724,668],{"class":226},[188,726,12],{"class":377},[188,728,628],{"class":226},[188,730,731,733,736,739],{"class":190,"line":487},[188,732,708],{"class":226},[188,734,735],{"class":377},"slot",[188,737,738],{"class":194}," \u002F",[188,740,628],{"class":226},[188,742,744,746,748,751,753,756,758,760,763],{"class":190,"line":743},9,[188,745,708],{"class":226},[188,747,543],{"class":377},[188,749,750],{"class":614}," v-if",[188,752,621],{"class":226},[188,754,755],{"class":624},"\"$slots.footer\"",[188,757,696],{"class":614},[188,759,621],{"class":226},[188,761,762],{"class":624},"\"mt-4 border-t border-line pt-4\"",[188,764,628],{"class":226},[188,766,768,771,773,776,778,781,783],{"class":190,"line":767},10,[188,769,770],{"class":226},"      \u003C",[188,772,735],{"class":377},[188,774,775],{"class":614}," name",[188,777,621],{"class":226},[188,779,780],{"class":624},"\"footer\"",[188,782,738],{"class":194},[188,784,628],{"class":226},[188,786,788,791,793],{"class":190,"line":787},11,[188,789,790],{"class":226},"    \u003C\u002F",[188,792,543],{"class":377},[188,794,628],{"class":226},[188,796,798,801,803],{"class":190,"line":797},12,[188,799,800],{"class":226},"  \u003C\u002F",[188,802,693],{"class":377},[188,804,628],{"class":226},[188,806,808,810,812],{"class":190,"line":807},13,[188,809,668],{"class":226},[188,811,683],{"class":377},[188,813,628],{"class":226},[12,815,816,817,820,821,824],{},"Nuxt Content 会全局注册 ",[27,818,819],{},"components\u002Fcontent\u002F"," 下的内容组件；放在其他目录时，需要另外配置全局注册。项目是 Nuxt 4 目录结构，这里的组件目录位于 ",[27,822,823],{},"app\u002F"," 下。",[12,826,827,828,831,832,22],{},"插槽默认保留 Markdown 生成的段落包装。如果组件需要把插槽文字直接放入标题等元素中，可以使用 ",[27,829,830],{},"\u003Cslot mdc-unwrap=\"p\" \u002F>"," 去除段落包装。具体行为见 ",[16,833,836],{"href":834,"rel":835},"https:\u002F\u002Fcontent.nuxt.com\u002Fdocs\u002Fcomponents\u002Fslot",[20],"Nuxt Content 的 Slot 文档",[44,838,839],{"id":839},"容器嵌套",[12,841,842],{},"嵌套时，外层使用更多冒号，让每个结束标记对应到正确的层级。",[12,844,845],{},[32,846,177],{},[179,848,850],{"className":181,"code":849,"language":183,"meta":184,"style":184},":::div\n这是外层内容。\n\n::div\n这是内层内容，可以继续使用 **强调**。\n::\n\n这是回到外层后的内容。\n:::\n",[27,851,852,857,862,866,870,884,888,892,897],{"__ignoreMap":184},[188,853,854],{"class":190,"line":191},[188,855,856],{"class":194},":::div\n",[188,858,859],{"class":190,"line":198},[188,860,861],{"class":194},"这是外层内容。\n",[188,863,864],{"class":190,"line":217},[188,865,220],{"emptyLinePlaceholder":6},[188,867,868],{"class":190,"line":223},[188,869,195],{"class":194},[188,871,872,875,877,880,882],{"class":190,"line":233},[188,873,874],{"class":194},"这是内层内容，可以继续使用 ",[188,876,205],{"class":204},[188,878,879],{"class":208},"强调",[188,881,205],{"class":204},[188,883,214],{"class":194},[188,885,886],{"class":190,"line":241},[188,887,249],{"class":194},[188,889,890],{"class":190,"line":246},[188,891,220],{"emptyLinePlaceholder":6},[188,893,894],{"class":190,"line":487},[188,895,896],{"class":194},"这是回到外层后的内容。\n",[188,898,899],{"class":190,"line":743},[188,900,901],{"class":194},":::\n",[12,903,904],{},[32,905,254],{},[171,907,908,911,917],{},[12,909,910],{},"这是外层内容。",[171,912,913],{},[12,914,874,915,22],{},[32,916,879],{},[12,918,919],{},"这是回到外层后的内容。",[12,921,922],{},"同样的结构也适用于已经注册的 Vue 组件。每一层都应正确闭合，避免后续章节被误收进容器。",[44,924,925],{"id":925},"绑定文章数据",[12,927,928,929,932],{},"使用双花括号可以引用当前文章的数据。",[27,930,931],{},"$doc"," 表示渲染时可访问的文档数据。",[12,934,935],{},[32,936,177],{},[179,938,940],{"className":181,"code":939,"language":183,"meta":184,"style":184},"本文标题：{{ $doc.title }}\n\n发布日期：{{ $doc.publish }}\n",[27,941,942,947,951],{"__ignoreMap":184},[188,943,944],{"class":190,"line":191},[188,945,946],{"class":194},"本文标题：{{ $doc.title }}\n",[188,948,949],{"class":190,"line":198},[188,950,220],{"emptyLinePlaceholder":6},[188,952,953],{"class":190,"line":217},[188,954,955],{"class":194},"发布日期：{{ $doc.publish }}\n",[12,957,958],{},[32,959,254],{},[12,961,962,963],{},"本文标题：",[964,965],"binding",{"value":966},"$doc.title",[12,968,969,970],{},"发布日期：",[964,971],{"value":972},"$doc.publish",[12,974,975,976,978],{},"Props 也可以绑定文档数据。以下写法需要先接入上文的 ",[27,977,406],{},"：",[179,980,982],{"className":181,"code":981,"language":183,"meta":184,"style":184},"::example-panel{:title=\"title\"}\n这里的标题取自文章的 title 字段。\n::\n",[27,983,984,989,994],{"__ignoreMap":184},[188,985,986],{"class":190,"line":191},[188,987,988],{"class":194},"::example-panel{:title=\"title\"}\n",[188,990,991],{"class":190,"line":198},[188,992,993],{"class":194},"这里的标题取自文章的 title 字段。\n",[188,995,996],{"class":190,"line":217},[188,997,249],{"class":194},[12,999,1000],{},"如果要查询新的自定义字段，需要扩展内容集合的 schema 和校验规则。数据绑定不等于在 Markdown 中编写完整 Vue 模板；业务逻辑应放在组件中。",[44,1002,1004],{"id":1003},"nuxt-content-代码语法","Nuxt Content 代码语法",[409,1006,1008],{"id":1007},"语言文件名与行号标记","语言、文件名与行号标记",[12,1010,1011,1012,22],{},"代码围栏可以携带语言、文件名和需要强调的行号。这些内容会被解析成代码组件的参数，详见 ",[16,1013,1016],{"href":1014,"rel":1015},"https:\u002F\u002Fcontent.nuxt.com\u002Fdocs\u002Fcomponents\u002Fprose#prosepre",[20],"Nuxt Content 的 ProsePre 文档",[12,1018,1019],{},[32,1020,177],{},[179,1022,1024],{"className":181,"code":1023,"language":183,"meta":184,"style":184},"```ts [article.ts]{2}\nconst title = \"MDC 教程\";\nconst published = true;\nconst tags = [\"MDC\", \"Nuxt Content\"];\n```\n",[27,1025,1026,1034,1049,1063,1088],{"__ignoreMap":184},[188,1027,1028,1031],{"class":190,"line":191},[188,1029,1030],{"class":204},"```",[188,1032,1033],{"class":637},"ts [article.ts]{2}\n",[188,1035,1036,1039,1042,1044,1047],{"class":190,"line":198},[188,1037,1038],{"class":650},"const",[188,1040,1041],{"class":194}," title ",[188,1043,621],{"class":226},[188,1045,1046],{"class":624}," \"MDC 教程\"",[188,1048,663],{"class":204},[188,1050,1051,1053,1056,1058,1061],{"class":190,"line":217},[188,1052,1038],{"class":650},[188,1054,1055],{"class":194}," published ",[188,1057,621],{"class":226},[188,1059,1060],{"class":462}," true",[188,1062,663],{"class":204},[188,1064,1065,1067,1070,1072,1075,1078,1081,1084,1086],{"class":190,"line":223},[188,1066,1038],{"class":650},[188,1068,1069],{"class":194}," tags ",[188,1071,621],{"class":226},[188,1073,1074],{"class":194}," [",[188,1076,1077],{"class":624},"\"MDC\"",[188,1079,1080],{"class":204},",",[188,1082,1083],{"class":624}," \"Nuxt Content\"",[188,1085,318],{"class":194},[188,1087,663],{"class":204},[188,1089,1090],{"class":190,"line":233},[188,1091,1092],{"class":204},"```\n",[12,1094,1095],{},[32,1096,1097],{},"当前效果",[179,1099,1105],{"className":1100,"code":1101,"filename":1102,"highlights":1103,"language":1104,"meta":184,"style":184},"language-ts shiki shiki-themes catppuccin-mocha catppuccin-latte","const title = \"MDC 教程\";\nconst published = true;\nconst tags = [\"MDC\", \"Nuxt Content\"];\n","article.ts",[198],"ts",[27,1106,1107,1119,1133],{"__ignoreMap":184},[188,1108,1109,1111,1113,1115,1117],{"class":190,"line":191},[188,1110,1038],{"class":650},[188,1112,1041],{"class":194},[188,1114,621],{"class":226},[188,1116,1046],{"class":624},[188,1118,663],{"class":204},[188,1120,1123,1125,1127,1129,1131],{"class":1121,"line":198},[190,1122],"highlight",[188,1124,1038],{"class":650},[188,1126,1055],{"class":194},[188,1128,621],{"class":226},[188,1130,1060],{"class":462},[188,1132,663],{"class":204},[188,1134,1135,1137,1139,1141,1143,1145,1147,1149,1151],{"class":190,"line":217},[188,1136,1038],{"class":650},[188,1138,1069],{"class":194},[188,1140,621],{"class":226},[188,1142,1074],{"class":194},[188,1144,1077],{"class":624},[188,1146,1080],{"class":204},[188,1148,1083],{"class":624},[188,1150,318],{"class":194},[188,1152,663],{"class":204},[49,1154,1155,1168],{},[52,1156,1157],{},[55,1158,1159,1162,1165],{},[58,1160,1161],{},"标记",[58,1163,1164],{},"传递的信息",[58,1166,1167],{},"本站当前效果",[68,1169,1170,1182,1195],{},[55,1171,1172,1176,1179],{},[73,1173,1174],{},[27,1175,1104],{},[73,1177,1178],{},"代码语言",[73,1180,1181],{},"用于语法着色",[55,1183,1184,1189,1192],{},[73,1185,1186],{},[27,1187,1188],{},"[article.ts]",[73,1190,1191],{},"文件名",[73,1193,1194],{},"显示为代码块标题或代码组标签",[55,1196,1197,1202,1205],{},[73,1198,1199],{},[27,1200,1201],{},"{2}",[73,1203,1204],{},"第二行的强调标记",[73,1206,1207],{},"显示强调背景与侧边标记",[12,1209,1210],{},"本站代码块已显示文件名、行强调和复制按钮；没有文件名时显示语言名称。复制保留原始缩进和换行，失败时会提示手动选择代码。语法高亮随站点深浅主题切换。",[409,1212,117],{"id":117},[12,1214,1215,1216,1219],{},"使用 ",[27,1217,1218],{},"::code-group"," 包住多个代码块。文件名标记作为标签名称，没有文件名时使用语言名称。",[12,1221,1222],{},[32,1223,177],{},[179,1225,1227],{"className":181,"code":1226,"language":183,"meta":184,"style":184},"::code-group\n\n```bash [安装依赖]\nvp install\n```\n\n```bash [运行检查]\nvp run check\n```\n\n::\n",[27,1228,1229,1234,1238,1245,1250,1254,1258,1265,1270,1274,1278],{"__ignoreMap":184},[188,1230,1231],{"class":190,"line":191},[188,1232,1233],{"class":194},"::code-group\n",[188,1235,1236],{"class":190,"line":198},[188,1237,220],{"emptyLinePlaceholder":6},[188,1239,1240,1242],{"class":190,"line":217},[188,1241,1030],{"class":204},[188,1243,1244],{"class":637},"bash [安装依赖]\n",[188,1246,1247],{"class":190,"line":223},[188,1248,1249],{"class":194},"vp install\n",[188,1251,1252],{"class":190,"line":233},[188,1253,1092],{"class":204},[188,1255,1256],{"class":190,"line":241},[188,1257,220],{"emptyLinePlaceholder":6},[188,1259,1260,1262],{"class":190,"line":246},[188,1261,1030],{"class":204},[188,1263,1264],{"class":637},"bash [运行检查]\n",[188,1266,1267],{"class":190,"line":487},[188,1268,1269],{"class":194},"vp run check\n",[188,1271,1272],{"class":190,"line":743},[188,1273,1092],{"class":204},[188,1275,1276],{"class":190,"line":767},[188,1277,220],{"emptyLinePlaceholder":6},[188,1279,1280],{"class":190,"line":787},[188,1281,249],{"class":194},[12,1283,1284],{},[32,1285,254],{},[1287,1288,1289,1304],"code-group",{},[179,1290,1294],{"className":1291,"code":1249,"filename":1292,"language":1293,"meta":184,"style":184},"language-bash shiki shiki-themes catppuccin-mocha catppuccin-latte","安装依赖","bash",[27,1295,1296],{"__ignoreMap":184},[188,1297,1298,1301],{"class":190,"line":191},[188,1299,1300],{"class":633},"vp",[188,1302,1303],{"class":624}," install\n",[179,1305,1307],{"className":1291,"code":1269,"filename":1306,"language":1293,"meta":184,"style":184},"运行检查",[27,1308,1309],{"__ignoreMap":184},[188,1310,1311,1313,1316],{"class":190,"line":191},[188,1312,1300],{"class":633},[188,1314,1315],{"class":624}," run",[188,1317,1318],{"class":624}," check\n",[12,1320,1321],{},"方向键切换标签，Home \u002F End 移动到首尾。复制按钮只复制当前面板，各个代码组独立切换。切换标签后，原面板的横向滚动位置保留。",[12,1323,1324],{},"下面第二个代码组展示同一条配置的两种写法，可用来核对各组状态互不影响。",[1287,1326,1327,1365],{},[179,1328,1332],{"className":1100,"code":1329,"filename":1330,"highlights":1331,"language":1104,"meta":184,"style":184},"const notices = {\n  staleAfterDays: 365,\n};\n","TypeScript 配置",[198],[27,1333,1334,1346,1360],{"__ignoreMap":184},[188,1335,1336,1338,1341,1343],{"class":190,"line":191},[188,1337,1038],{"class":650},[188,1339,1340],{"class":194}," notices ",[188,1342,621],{"class":226},[188,1344,1345],{"class":204}," {\n",[188,1347,1349,1352,1354,1357],{"class":1348,"line":198},[190,1122],[188,1350,1351],{"class":194},"  staleAfterDays",[188,1353,647],{"class":226},[188,1355,1356],{"class":462}," 365",[188,1358,1359],{"class":204},",\n",[188,1361,1362],{"class":190,"line":217},[188,1363,1364],{"class":204},"};\n",[179,1366,1371],{"className":1367,"code":1368,"filename":1369,"language":1370,"meta":184,"style":184},"language-yaml shiki shiki-themes catppuccin-mocha catppuccin-latte","notices:\n  staleAfterDays: 365\n","YAML 写法","yaml",[27,1372,1373,1381],{"__ignoreMap":184},[188,1374,1375,1378],{"class":190,"line":191},[188,1376,1377],{"class":377},"notices",[188,1379,1380],{"class":226},":\n",[188,1382,1383,1385,1387],{"class":190,"line":198},[188,1384,1351],{"class":377},[188,1386,647],{"class":226},[188,1388,1389],{"class":462}," 365\n",[44,1391,1392],{"id":1392},"图片展示与预览",[12,1394,1395],{},"标准 Markdown 图片自动支持预览，可填写尺寸和可选图注。提供宽高可预留展示空间，减轻图片加载后的布局变化。",[12,1397,1398],{},[32,1399,177],{},[179,1401,1403],{"className":181,"code":1402,"language":183,"meta":184,"style":184},"![文章内容处理流程](\u002Fimages\u002Fcontent-example.svg){width=\"1200\" height=\"675\" caption=\"Markdown 经 Nuxt Content 解析后渲染为文章页面。\"}\n",[27,1404,1405],{"__ignoreMap":184},[188,1406,1407,1410,1413,1415,1417,1420,1422],{"class":190,"line":191},[188,1408,1409],{"class":377},"![",[188,1411,1412],{"class":624},"文章内容处理流程",[188,1414,318],{"class":377},[188,1416,374],{"class":204},[188,1418,1419],{"class":377},"\u002Fimages\u002Fcontent-example.svg",[188,1421,381],{"class":204},[188,1423,1424],{"class":194},"{width=\"1200\" height=\"675\" caption=\"Markdown 经 Nuxt Content 解析后渲染为文章页面。\"}\n",[12,1426,1427],{},[32,1428,254],{},[12,1430,1431],{},[1432,1433],"img",{"alt":1412,"caption":1434,"height":1435,"src":1419,"width":1436},"Markdown 经 Nuxt Content 解析后渲染为文章页面。",675,1200,[12,1438,1439],{},"点击图片打开预览，滚轮或双指手势缩放，放大后可拖拽。工具栏提供放大、缩小、复位和关闭；键盘使用加减号、方向键、0 和 Escape。缩放范围为初始适应尺寸的 1–4 倍。",[12,1441,1442,1443,1446],{},"通过布尔参数 ",[27,1444,1445],{},"preview"," 关闭单张图片的预览：",[179,1448,1450],{"className":181,"code":1449,"language":183,"meta":184,"style":184},"![静态示意图](\u002Fimages\u002Fcontent-example.svg){:preview=\"false\"}\n",[27,1451,1452],{"__ignoreMap":184},[188,1453,1454,1456,1459,1461,1463,1465,1467],{"class":190,"line":191},[188,1455,1409],{"class":377},[188,1457,1458],{"class":624},"静态示意图",[188,1460,318],{"class":377},[188,1462,374],{"class":204},[188,1464,1419],{"class":377},[188,1466,381],{"class":204},[188,1468,1469],{"class":194},"{:preview=\"false\"}\n",[12,1471,1472],{},"图片被链接包裹时，继续执行链接跳转，不打开预览：",[179,1474,1476],{"className":181,"code":1475,"language":183,"meta":184,"style":184},"[![阅读 Markdown 教程](\u002Fimages\u002Fcontent-example.svg)](\u002Fposts\u002Fmarkdown\u002Fmarkdown)\n",[27,1477,1478],{"__ignoreMap":184},[188,1479,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500],{"class":190,"line":191},[188,1481,312],{"class":311},[188,1483,1409],{"class":377},[188,1485,575],{"class":624},[188,1487,318],{"class":377},[188,1489,374],{"class":204},[188,1491,1419],{"class":377},[188,1493,381],{"class":204},[188,1495,318],{"class":311},[188,1497,374],{"class":204},[188,1499,582],{"class":377},[188,1501,585],{"class":204},[12,1503,1504],{},"封面和头像不受此功能影响。图片网格、前后切图和作品卡片尚未提供。",[44,1506,1508],{"id":1507},"github-仓库卡片","GitHub 仓库卡片",[12,1510,1511,1512,1515,1516,1518],{},"使用公开仓库的 ",[27,1513,1514],{},"owner\u002Fname"," 标识。以下源码可直接复制，结束标记 ",[27,1517,164],{}," 必须保留；卡片不接收插槽内容。",[12,1520,1521],{},[32,1522,177],{},[179,1524,1526],{"className":181,"code":1525,"language":183,"meta":184,"style":184},"::github{repo=\"nuxt\u002Fcontent\"}\n::\n",[27,1527,1528,1533],{"__ignoreMap":184},[188,1529,1530],{"class":190,"line":191},[188,1531,1532],{"class":194},"::github{repo=\"nuxt\u002Fcontent\"}\n",[188,1534,1535],{"class":190,"line":198},[188,1536,249],{"class":194},[12,1538,1539],{},[32,1540,254],{},[1542,1543],"github",{"repo":1544},"nuxt\u002Fcontent",[12,1546,1547],{},"卡片显示头像、仓库名称、简介、Star、Fork、许可证和主要语言，点击整张卡片在新标签页打开 GitHub。文章与关于页均可使用，普通 GitHub 链接不会自动转换。",[12,1549,1550,1551,1553,1554,1557],{},"仓库信息在站点构建时生成快照，随下一次构建更新；阅读页面时不请求 GitHub API。未取得的字段显示 ",[27,1552,227],{},"，实际计数为零时显示 ",[27,1555,1556],{},"0","。头像加载失败时显示本地图标。",[44,1559,1560],{"id":1560},"视频卡片",[12,1562,1215,1563,1566,1567,1570],{},[27,1564,1565],{},"Bilibili"," 与 ",[27,1568,1569],{},"Youtube"," 组件嵌入视频。卡片支持懒加载、全屏与响应式宽度，默认不自动播放：",[179,1572,1574],{"className":181,"code":1573,"language":183,"meta":184,"style":184},"::bilibili{bvid=\"BV1fK4y1s7Qf\" title=\"Bilibili 视频示例\"}\n::\n\n::youtube{id=\"5gIf0_xpFPI\" title=\"YouTube 视频示例\"}\n::\n",[27,1575,1576,1581,1585,1589,1594],{"__ignoreMap":184},[188,1577,1578],{"class":190,"line":191},[188,1579,1580],{"class":194},"::bilibili{bvid=\"BV1fK4y1s7Qf\" title=\"Bilibili 视频示例\"}\n",[188,1582,1583],{"class":190,"line":198},[188,1584,249],{"class":194},[188,1586,1587],{"class":190,"line":217},[188,1588,220],{"emptyLinePlaceholder":6},[188,1590,1591],{"class":190,"line":223},[188,1592,1593],{"class":194},"::youtube{id=\"5gIf0_xpFPI\" title=\"YouTube 视频示例\"}\n",[188,1595,1596],{"class":190,"line":233},[188,1597,249],{"class":194},[12,1599,1600,1601,1604,1605,22],{},"也可通过 ",[27,1602,1603],{},"src"," 传入视频链接。完整效果、分 P 与开始时间参数见 ",[16,1606,1608],{"href":1607},"\u002Fposts\u002Fmarkdown\u002Fvideo","在文章中嵌入视频",[44,1610,1611],{"id":1611},"正文提醒框",[12,1613,1215,1614,1617],{},[27,1615,1616],{},"::alert"," 展示说明、建议或警告。正文支持 Markdown；标题是纯文本，省略时显示对应类型的默认标题。",[12,1619,1620],{},[32,1621,177],{},[179,1623,1625],{"className":181,"code":1624,"language":183,"meta":184,"style":184},"::alert{theme=\"github\" type=\"important\" title=\"先运行检查\"}\n提交前运行 `vp run check`，确认类型与格式检查通过。\n::\n\n::alert{theme=\"obsidian\" type=\"check\" title=\"补充说明\" collapsible :open=\"false\"}\n点击标题展开，也可以使用键盘 Enter 或空格。\n::\n",[27,1626,1627,1632,1643,1647,1651,1656,1661],{"__ignoreMap":184},[188,1628,1629],{"class":190,"line":191},[188,1630,1631],{"class":194},"::alert{theme=\"github\" type=\"important\" title=\"先运行检查\"}\n",[188,1633,1634,1637,1640],{"class":190,"line":198},[188,1635,1636],{"class":194},"提交前运行 ",[188,1638,1639],{"class":624},"`vp run check`",[188,1641,1642],{"class":194},"，确认类型与格式检查通过。\n",[188,1644,1645],{"class":190,"line":217},[188,1646,249],{"class":194},[188,1648,1649],{"class":190,"line":223},[188,1650,220],{"emptyLinePlaceholder":6},[188,1652,1653],{"class":190,"line":233},[188,1654,1655],{"class":194},"::alert{theme=\"obsidian\" type=\"check\" title=\"补充说明\" collapsible :open=\"false\"}\n",[188,1657,1658],{"class":190,"line":241},[188,1659,1660],{"class":194},"点击标题展开，也可以使用键盘 Enter 或空格。\n",[188,1662,1663],{"class":190,"line":246},[188,1664,249],{"class":194},[12,1666,1667],{},[32,1668,254],{},[1670,1671,1674],"alert",{"theme":1542,"title":1672,"type":1673},"先运行检查","important",[12,1675,1636,1676,1679],{},[27,1677,1678],{},"vp run check","，确认类型与格式检查通过。",[1670,1681,1687],{"theme":1682,"title":1683,"type":1684,":collapsible":1685,":open":1686},"obsidian","补充说明","check","true","false",[12,1688,1689],{},"点击标题展开，也可以使用键盘 Enter 或空格。",[12,1691,1692,1693,1695,1696,1695,1698,503,1701,1704,1705,1708,1709,1712,1713,1708,1716,1719,1720,1723,1724,1726,1727,1730],{},"四种风格为 ",[27,1694,1542],{},"、",[27,1697,1682],{},[27,1699,1700],{},"vitepress",[27,1702,1703],{},"docusaurus","。省略 ",[27,1706,1707],{},"theme"," 时使用 ",[27,1710,1711],{},"site.article.alerts.theme","，默认是 GitHub；省略 ",[27,1714,1715],{},"type",[27,1717,1718],{},"note","。开启 ",[27,1721,1722],{},"collapsible"," 后默认收起，可通过 ",[27,1725,146],{}," 初始展开，字符串 ",[27,1728,1729],{},"open=\"false\""," 也能正确解析。",[12,1732,1733,1734,1738,1739,1742],{},"完整类型表、各风格效果、全站配置和嵌套示例见",[16,1735,1737],{"href":1736},"\u002Fposts\u002Fmarkdown\u002Fmarkdown-extended#%E5%A4%9A%E9%A3%8E%E6%A0%BC%E6%8F%90%E9%86%92%E6%A1%86","多风格提醒框","。本站不转换 ",[27,1740,1741],{},"> [!NOTE]"," 等引用式提醒语法。",[44,1744,1745],{"id":1745},"文章自动提醒",[12,1747,1748,1749,1752,1753,1756,1757,1760],{},"文章设置 ",[27,1750,1751],{},"wip: true"," 时，在标题信息后显示施工提醒。最后维护日期优先取 ",[27,1754,1755],{},"update","，没有时取 ",[27,1758,1759],{},"publish","；满 365 个上海自然日后显示内容时效提醒。",[12,1762,1763,1764,1767,1768,1771,1772,1775],{},"提醒不需要在正文手写组件。站点配置 ",[27,1765,1766],{},"site.article.notices"," 可关闭施工提醒、调整过期天数，或用 ",[27,1769,1770],{},"staleAfterDays: null"," 关闭过期提醒。",[27,1773,1774],{},"wip"," 不会隐藏文章，也不用于控制访问权限。",[44,1777,1778],{"id":1778},"常见问题",[409,1780,1782],{"id":1781},"为什么组件没有显示","为什么组件没有显示？",[12,1784,1785,1786,1695,1789,1695,1792,1695,1795,503,1797,1799,1800,503,1802,1804],{},"先检查组件文件是否存在、名称是否一致，以及是否已全局注册。本站已提供 ",[27,1787,1788],{},"Alert",[27,1790,1791],{},"CodeGroup",[27,1793,1794],{},"Github",[27,1796,1565],{},[27,1798,1569],{},"。本文中的 ",[27,1801,406],{},[27,1803,498],{}," 仅用于教学，需要自行实现后才能使用。",[409,1806,1808],{"id":1807},"为什么示例里的插槽变成标题","为什么示例里的插槽变成标题？",[12,1810,1811,1812,1815,1816,1819],{},"确认 ",[27,1813,1814],{},"#footer"," 位于组件开始和结束标记之间。普通 Markdown 区域中的 ",[27,1817,1818],{},"# footer"," 会被识别为一级标题。",[409,1821,1823],{"id":1822},"为什么要用四个反引号展示源码","为什么要用四个反引号展示源码？",[12,1825,1826],{},"当示例本身包含三个反引号的代码围栏时，外层使用四个反引号，才能把整个片段当作文本展示。写入实际文章时，只复制内层需要的部分。",[409,1828,1830],{"id":1829},"如何接入自定义组件","如何接入自定义组件？",[12,1832,1833,1834,22],{},"自定义组件需要按 Nuxt Content \u002F Vue 的接口实现并注册。多风格提醒框、图片画廊和仓库卡片的状态见 ",[16,1835,1837],{"href":1836},"\u002Fposts\u002Fmarkdown\u002Fmarkdown-extended","Markdown 扩展功能",[1839,1840,1841],"style",{},"html pre.shiki code .szT_X, html code.shiki .szT_X{--shiki-default:#CDD6F4;--shiki-light:#4C4F69}html pre.shiki code .sxk1D, html code.shiki .sxk1D{--shiki-default:#9399B2;--shiki-light:#7C7F93}html pre.shiki code .sIG05, html code.shiki .sIG05{--shiki-default:#F38BA8;--shiki-default-font-weight:bold;--shiki-light:#D20F39;--shiki-light-font-weight:bold}html pre.shiki code .siJSA, html code.shiki .siJSA{--shiki-default:#94E2D5;--shiki-light:#179299}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .s9ZOB, html code.shiki .s9ZOB{--shiki-default:#B4BEFE;--shiki-light:#7287FD}html pre.shiki code .sZBvu, html code.shiki .sZBvu{--shiki-default:#89B4FA;--shiki-light:#1E66F5}html pre.shiki code .s_wmW, html code.shiki .s_wmW{--shiki-default:#FAB387;--shiki-light:#FE640B}html pre.shiki code .s0AGO, html code.shiki .s0AGO{--shiki-default:#89DCEB;--shiki-light:#04A5E5}html pre.shiki code .sDkzg, html code.shiki .sDkzg{--shiki-default:#CBA6F7;--shiki-light:#8839EF}html pre.shiki code .ssZzq, html code.shiki .ssZzq{--shiki-default:#A6E3A1;--shiki-light:#40A02B}html pre.shiki code .sIs8M, html code.shiki .sIs8M{--shiki-default:#F9E2AF;--shiki-light:#DF8E1D}html pre.shiki code .s3Fsb, html code.shiki .s3Fsb{--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-light:#1E66F5;--shiki-light-font-style:italic}html pre.shiki code .sY22P, html code.shiki .sY22P{--shiki-default:#CDD6F4;--shiki-default-font-style:italic;--shiki-light:#4C4F69;--shiki-light-font-style:italic}",{"title":184,"searchDepth":797,"depth":233,"links":1843},[1844,1845,1846,1847,1852,1853,1854,1855,1859,1860,1861,1862,1863,1864],{"id":46,"depth":198,"text":47},{"id":154,"depth":198,"text":154},{"id":284,"depth":198,"text":284},{"id":399,"depth":198,"text":400,"children":1848},[1849,1850,1851],{"id":411,"depth":217,"text":411},{"id":439,"depth":217,"text":440},{"id":492,"depth":217,"text":492},{"id":527,"depth":198,"text":527},{"id":839,"depth":198,"text":839},{"id":925,"depth":198,"text":925},{"id":1003,"depth":198,"text":1004,"children":1856},[1857,1858],{"id":1007,"depth":217,"text":1008},{"id":117,"depth":217,"text":117},{"id":1392,"depth":198,"text":1392},{"id":1507,"depth":198,"text":1508},{"id":1560,"depth":198,"text":1560},{"id":1611,"depth":198,"text":1611},{"id":1745,"depth":198,"text":1745},{"id":1778,"depth":198,"text":1778,"children":1865},[1866,1867,1868,1869],{"id":1781,"depth":217,"text":1782},{"id":1807,"depth":217,"text":1808},{"id":1822,"depth":217,"text":1823},{"id":1829,"depth":217,"text":1830},[1871],"文章示例","本文介绍 MDC（Markdown Components）在 Nuxt Content 中的语法与用法，涵盖块级容器、行内属性、Props 传递、插槽、嵌套、绑定文章数据，以及代码块与代码组、图片预览、GitHub 仓库卡片、视频卡片、提醒框和文章自动提醒等已接入功能。文末说明自定义组件需实现并注册，并解答组件不显示、插槽误识别等常见问题。",{},"\u002Fposts\u002Fmarkdown\u002Fmdc-tutorial",0,"1970-01-01",{"title":5,"description":1872},"posts\u002F1.markdown\u002F02.mdc-tutorial","ai",[1881,369,1882],"MDC","Vue","#a369ff","2026-09-27",false,2594,"4FyVy-gHgSCsxZ7kud8tm5fP4tFtcK5KCVdtxwVD5gk",[1889,1905,1919,1927,1940,1954,1967,1979,1989,2002,2014,2025,2037,2048,2061,2072,2081,2095,2107,2119,2127,2134,2141,2144],{"path":1890,"stem":1891,"title":1892,"description":1893,"wordCount":1894,"publish":1895,"update":1895,"cover":1896,"tags":1897,"categories":1903,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fwsl3","posts\u002F2026\u002Fwsl3","WSL 3 正式发布~","微软发布 WSL 3.0.1，正式提供稳定的 WSL 容器功能，无需 Docker 即可原生创建和运行 Linux 容器。该版本改进包括跨操作系统文件访问性能最高提升至原来的两倍（采用 virtiofs），以及网络模式 Consomme 优化端口映射和 VPN 兼容性。文章介绍了 WSL 安装、从 WSL 2 升级的方法，并示例使用 wslc 运行 Ubuntu、Nginx 容器及构建自定义镜像。",1038,"2026-10-01","\u002Fimages\u002F2026\u002Fwsl3\u002Fwsl3.png",[1898,1899,1900,1901,1902],"WSL","Linux","Windows","Docker","容器",[1904],"工具",{"path":1906,"stem":1907,"title":1908,"description":1909,"wordCount":1910,"publish":1911,"update":7,"cover":1912,"tags":1913,"categories":1918,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fcodex-prompt","posts\u002F2026\u002Fcodex-prompt","Codex 的 GPT-6 Sol 提示词泄露了？","文章围绕网传Codex GPT-6 Sol提示词泄露展开，选取部分内容解读。提示词要求像同事一样交流、降低认知负担，用具体描述并说明改动、原因、测试与风险；明确禁止使用AI套话；通过高质量和低质量示例约束输出。摘要表还涵盖沟通、执行、权限、长期任务、工具与界面、质量与证据等核心要求。",1073,"2026-09-25","\u002Fimages\u002F2026\u002Fcodex-prompt\u002Fcodex-prompt.png",[1914,1915,1916,1917],"AI","Codex","提示词","Agent",[1914],{"path":1920,"stem":1921,"title":1922,"description":1923,"wordCount":1924,"publish":1911,"update":7,"cover":7,"tags":1925,"categories":1926,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fcodex-prompt-translation","posts\u002F2026\u002Fcodex-prompt-translation","Codex GPT-6 Sol 提示词完整中文译文","第三方仓库收录的 Codex GPT-6 Sol 提示词中文译文，按原顺序保留全部 54 个模板。",34261,[1914,1915,1916,1917],[1914],{"path":1928,"stem":1929,"title":1930,"description":1931,"wordCount":1932,"publish":1933,"update":1934,"cover":1935,"tags":1936,"categories":1939,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fjev","posts\u002F2026\u002Fjev","JEV 是好模型吗？","本文评析JEV模型，认为其并非通用大模型，而是专做预定义判断的System One模型，通过选择、评分、是非题返回结构化结果，不生成文本。其快与便宜源于非自回归并行输出，但“零幻觉”仅指输出结构合规，判断仍可能出错。该思路适用于答案范围明确、需频繁调用的场景，也可用普通大模型近似实现，核心在于把任务收窄为单一判断。",2429,"2026-09-21","2026-09-23","\u002Fimages\u002F2026\u002Fjev\u002Fjev.webp",[1914,1937,1938],"JEV","LLM",[1914],{"path":1941,"stem":1942,"title":1943,"description":1944,"wordCount":1945,"publish":1946,"update":1947,"cover":7,"tags":1948,"categories":1952,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002Fblog\u002Foverview","posts\u002F2.blog\u002F01.overview","新版博客已上线！","新版博客“mukuchi”上线，具备文章写作、标签分类、全文搜索、阅读目录、代码复制、图片缩放、深浅主题切换及移动端适配等功能。内容以Markdown和MDC编写，后台支持草稿、上传、预览与发布，并可生成AI摘要、朗读和双人播客。技术栈采用Nuxt、Vue、UnoCSS、Nuxt Content及Cloudflare服务，文章存于GitHub仓库。后续计划增加工具、重做账号系统并改为站内评论。",1059,"2026-09-14","2026-09-22",[1949,1950,1882,1951],"博客","Nuxt","Cloudflare",[1953],"建站记录",{"path":1955,"stem":1956,"title":1957,"description":1958,"wordCount":1959,"publish":1960,"update":7,"cover":7,"tags":1961,"categories":1965,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fgame-dlss5","posts\u002F2026\u002Fgame-dlss5","哦，我的上帝！这是真实的！ —— DLSS 5 渲染实测","文章以《崩坏3rd》和《崩坏：星穹铁道》为例，展示DLSS 5渲染在多个场景下开启与关闭的画面对比。教程说明通过XXMI-Launcher注入ReShade的d3d12.dll，启动游戏后按Home键配置RenoDX DLSS参数，并提示下线前需手动关闭。文末附相关工具与网盘资源下载方式。",390,"2026-09-08",[1962,1963,1964],"DLSS5","mod","xxmi",[1966],"游戏",{"path":1968,"stem":1969,"title":1970,"description":1971,"wordCount":1972,"publish":1973,"update":1974,"cover":7,"tags":1975,"categories":1978,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fmilanote-api","posts\u002F2026\u002Fmilanote-api","Milanote API","本文介绍了作者开发的 Milanote API 项目，用于在外部使用 Milanote 分享 Board 的内容。项目已完成根据分享链接获取完整 API 数据、解析卡片内容与布局、构建 Playground 在线可视化示例、部署至 Cloudflare Workers 并提供字段筛选功能；待实现免密钥在线解析。文章还说明了获取 Milanote 只读分享链接的步骤，并展示了 Playground 界面效果。",234,"2026-07-22","2026-07-23",[1976,1977],"Milanote","API",[1904],{"path":1980,"stem":1981,"title":1982,"description":1983,"wordCount":1984,"publish":1985,"update":7,"cover":1986,"tags":1987,"categories":1988,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2026\u002Fduolingo","posts\u002F2026\u002Fduolingo","今天你 Duolingo 了吗？","本文介绍使用 Cloudflare Workers 构建 Duolingo 用户信息接口，解决跨域与缓存问题。接口支持按环境变量查询固定用户，返回昵称、头像、经验及连续学习天数，并提供搜索和其他用户详情接口。通过 KV 缓存和定时任务减少上游请求，支持带鉴权的手动刷新，并包含超时和错误处理。",1581,"2026-07-14","\u002Fimages\u002F2026\u002Fduolingo\u002Fduolingo.png",[1977,1951],[1904],{"path":1990,"stem":1991,"title":1992,"description":1993,"wordCount":1994,"publish":1995,"update":7,"cover":7,"tags":1996,"categories":2001,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002Fblender","posts\u002Fblender\u002Findex","Blender 专题","本文介绍Blender这一免费开源3D建模软件，涵盖建模、动画、渲染、视频剪辑等功能，适合从入门到高级开发。文档提供官网地址；教程部分包含动画大师课VV purple、角色建模课Zimon3D，并附B站链接；素材推荐BlenderKit官方素材库、Sketchfab及模之屋等免费资源平台。",158,"2026-06-18",[1997,1998,1999,2000],"Blender","3D","建模","动画",[1997],{"path":2003,"stem":2004,"title":2005,"description":2006,"wordCount":2007,"publish":1995,"update":7,"cover":7,"tags":2008,"categories":2013,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002Fthreejs","posts\u002Fthreejs\u002Findex","Three.js 专题","本文介绍Three.js作为Web端主流3D图形库，封装WebGL\u002FWebGPU，用于构建3D场景、动画、游戏和数据可视化等。文章汇总官方资源，包括官网、示例、文档、教程、在线编辑器和GitHub仓库。基础使用方面，说明在Vue3中通过TresJS、React中通过React Three Fiber进行组件化开发，并提及GSAP动画库和Blender建模软件。其他资源推荐Three.js Journey系统教程、The Book of Shaders书籍和Kenney免费游戏素材，AI与问题部分尚在完善中。",418,[2009,2010,2011,2012],"Three.js","WebGL","WebGPU","Shader",[2009],{"path":2015,"stem":2016,"title":2017,"description":2018,"wordCount":2019,"publish":2020,"update":2020,"cover":2021,"tags":2022,"categories":2024,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2025\u002Fmagic-js","posts\u002F2025\u002Fmagic-js","你能看懂这些 JavaScript 表达式吗？","本文解析了JavaScript中多个怪异表达式结果的原因，指出其源于IEEE 754浮点数表示、隐式类型转换及同一符号在不同语法环境中的歧义。例如NaN为number、大整数舍入、0.1+0.2不等于0.3、空数组与对象相加、布尔值运算及宽松相等等行为，均可据此解释。建议工程中使用严格相等和明确转换以避免陷阱。",2035,"2025-07-31","\u002Fimages\u002F2025\u002Fmagic-js\u002Fmagic-js.png",[2023],"JavaScript",[2023],{"path":2026,"stem":2027,"title":2028,"description":2029,"wordCount":2030,"publish":2031,"update":2032,"cover":2033,"tags":2034,"categories":2036,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Fgit","posts\u002F2021\u002Fgit","Git 笔记","本文介绍Git的安装与基础配置，涵盖用户名邮箱设置及配置作用域优先级；解释工作区、暂存区和本地仓库的工作流；列举git add、commit、branch、switch、log、diff、stash、rm、mv等常用命令；说明查看日志、比较差异、对象关系、搁置改动、忽略文件等操作；并回答删除分支、修改提交信息、合并提交、取消暂存、丢弃改动和删除文件等常见问题。",878,"2021-09-07","2026-05-17","https:\u002F\u002Fgit-scm.com\u002Fimages\u002Flogo@2x.png",[2035],"Git",[1904],{"path":2038,"stem":2039,"title":2040,"description":2041,"wordCount":2042,"publish":2043,"update":7,"cover":2044,"tags":2045,"categories":2047,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Fhexo-editor","posts\u002F2021\u002Fhexo-editor","HexoEditor(适用于Hexo的专用编辑器)","本文介绍了专为Hexo优化的Markdown编辑器HexoEditor。该编辑器预览效果与Hexo生成页面高度相似，支持快速执行Hexo命令。软件开源，可从GitHub获取安装程序及中英文手册。配置包括通用、编辑、Hexo路径设置、渲染主题（支持GitHub和Next）以及图片云存储（如SM.MS、腾讯云等）。还提供右键快捷操作Hexo命令。",587,"2021-03-22","\u002Fimages\u002F2021\u002Fhexo-editor\u002Fhexo-editor.jpg",[1904,2046],"Hexo",[1904],{"path":2049,"stem":2050,"title":2051,"description":2052,"wordCount":2053,"publish":2043,"update":7,"cover":2054,"tags":2055,"categories":2059,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Ftomcat-servlet","posts\u002F2021\u002Ftomcat-servlet","Tomcat和Servlet应用配置及部分问题","本文介绍Tomcat与Servlet的配置及常见问题。Tomcat部分涵盖安装、环境变量、启动关闭、乱码与端口占用处理、项目部署及IDEA集成。Servlet部分说明实现方式、生命周期、请求与响应对象、乱码处理、请求转发与重定向，以及Cookie、Session、ServletContext等对象和三大域对象的作用范围。",4196,"\u002Fimages\u002F2021\u002Ftomcat-servlet\u002Ftomcat-servlet.jpg",[2056,2057,2058],"JavaWEb","Tomcat","Servlet",[2060],"笔记",{"path":2062,"stem":2063,"title":2064,"description":2065,"wordCount":2066,"publish":2067,"update":7,"cover":2068,"tags":2069,"categories":2071,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Fgithub-actions","posts\u002F2021\u002Fgithub-actions","使用Github Action实现全自动部署","本文介绍使用GitHub Action实现Hexo博客全自动部署的流程。需先获取GitHub与Coding的个人访问令牌，创建存放源码的私有仓库，并在站点配置中设置部署仓库地址和令牌。接着在.github\u002Fworkflows目录创建自动部署工作流文件，配置检出、安装Node与Hexo、缓存依赖、生成静态文件和部署步骤。随后更新远程仓库分支，添加.gitignore屏蔽项并推送源码，最后通过Actions查看部署状态。",910,"2021-01-26","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions.jpg",[2070],"博客优化",[2070],{"path":2073,"stem":2074,"title":2075,"description":2076,"wordCount":2077,"publish":2067,"update":7,"cover":2078,"tags":2079,"categories":2080,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Fhexo-auto-open-editor","posts\u002F2021\u002Fhexo-auto-open-editor","Hexo添加文章时自动打开编辑器","本文介绍Hexo新建文章后自动打开编辑器的方法。通过监听Hexo的new事件并在scripts目录下添加脚本，利用child_process.exec执行系统命令，Windows使用start、macOS使用open -a启动指定编辑器并打开新文章路径。用户需替换脚本中的编辑器绝对地址，保存后执行hexo new即可自动打开对应文件。",269,"\u002Fimages\u002F2021\u002Fhexo-auto-open-editor\u002Fhexo-auto-open-editor.webp",[2070],[2070],{"path":2082,"stem":2083,"title":2084,"description":2085,"wordCount":2086,"publish":2087,"update":7,"cover":2088,"tags":2089,"categories":2094,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2021\u002Fhttp-canary-ca","posts\u002F2021\u002Fhttp-canary-ca","解决部分安卓11HttpCanary无法安装证书及其他诸多问题","本文分享安卓11下HttpCanary证书安装失败等问题的解决方法，需root或虚拟机。MIUI系统点击安装根证书无反应时，将指定缓存路径的HttpCanary.pem复制为HttpCanary.jks并重启应用，再以root权限安装到系统；无效则先导出带.0证书再安装。抓https失败或提示证书不可信，可安装Xposed框架和JustTrustMe插件关闭SSL认证。资源可从酷安或应用商店获取，免费版与付费版主要区别为插件支持。",506,"2021-01-16","\u002Fimages\u002F2021\u002Fhttp-canary-ca\u002Fhttp-canary-ca.png",[2090,2091,2092,2093],"Android","HttpCanary","抓包","问题",[2092],{"path":2096,"stem":2097,"title":2098,"description":2099,"wordCount":2100,"publish":2101,"update":7,"cover":2102,"tags":2103,"categories":2106,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2020\u002Fmysql-basics","posts\u002F2020\u002Fmysql-basics","MySQL 基础","本文介绍MySQL关系型数据库管理系统基础知识，包括数据库、数据库管理系统、数据库系统和数据库应用系统的概念，及其数据结构化、共享性高、冗余度低、独立性强和统一管理等特点；简述数据库的创建、查看、打开、修改和删除操作，以及数据表的创建、修改、删除和表数据的添加、更新、删除方法，并提及图形化管理工具。",1825,"2020-06-05","\u002Fimages\u002F2020\u002Fmysql-basics\u002Fmysql-basics.png",[2104,2105],"mysql","数据库",[2060],{"path":2108,"stem":2109,"title":2110,"description":2111,"wordCount":2112,"publish":2113,"update":7,"cover":2114,"tags":2115,"categories":2118,"series":7,"seriesOrder":7,"pin":1875,"wip":1885,"theme":1883},"\u002Fposts\u002F2020\u002Fpython-tkinter","posts\u002F2020\u002Fpython-tkinter","Python图形用户界面(Tkinter)","本文简介Python常用GUI库，重点说明Tkinter的标准控件、共同属性及pack、grid、place三种几何布局管理器。使用Tkinter需导入模块、创建控件、添加交互并编写函数、进入主事件循环。文中以简单登录界面为例，演示标签、输入框、按钮的放置，以及为按钮设置回调函数进行输入校验和登录提示。",965,"2020-05-25","\u002Fimages\u002F2020\u002Fpython-tkinter\u002Fpython-tkinter.jpg",[2116,2117],"Python","GUI",[2060],{"path":150,"stem":2120,"title":2121,"description":2122,"wordCount":2123,"publish":1876,"update":2124,"cover":7,"tags":2125,"categories":2126,"series":1871,"seriesOrder":233,"pin":1875,"wip":1885,"theme":1883},"posts\u002F1.markdown\u002F05.collapse","在正文中使用折叠内容","本文说明正文中折叠内容的使用方法：折叠块适合放置补充说明、较长代码或可选阅读内容，标题始终可见，点击整行展开，各折叠块独立记录状态。支持默认收起，也可通过 open 属性设置初始展开。折叠内部可包含 Markdown、列表、代码、表格、图片等，目录或锚点访问内部标题会先展开所属折叠块。还支持嵌套折叠，外层使用三个冒号、内层使用两个冒号，内外层独立控制；访问嵌套目标可一次展开沿途两层。",428,"2026-09-26",[75,1881],[1871],{"path":1607,"stem":2128,"title":1608,"description":2129,"wordCount":2130,"publish":1876,"update":1934,"cover":7,"tags":2131,"categories":2133,"series":1871,"seriesOrder":223,"pin":1875,"wip":1885,"theme":1883},"posts\u002F1.markdown\u002F04.video","本文介绍在文章与关于页中嵌入Bilibili和YouTube视频的MDC组件用法，无需API密钥或手写iframe。播放器按16:9自适应宽度，接近可视区域时加载，默认不自动播放。Bilibili可通过BV号或视频链接指定分P与开始时间，YouTube可通过11位视频ID或链接指定开始时间，标题由title参数设置。组件会过滤分享追踪参数与自动播放设置，无效参数仅显示提示，不影响正文。",597,[75,1881,2132],"视频",[1871],{"path":1836,"stem":2135,"title":1837,"description":2136,"wordCount":2137,"publish":1876,"update":1884,"cover":7,"tags":2138,"categories":2140,"series":1871,"seriesOrder":217,"pin":1875,"wip":6,"theme":1883},"posts\u002F1.markdown\u002F03.markdown-extended","本文介绍Markdown扩展功能。已实现多风格提醒框，支持GitHub、Obsidian、VitePress、Docusaurus四种主题及折叠嵌套，可通过参数或全站配置设置；同时提供GitHub仓库卡片、Bilibili\u002FYouTube视频卡片与正文图片预览。图片画廊与作品集仍在计划中，当前采用标准图片语法配合图注和链接。GitHub仓库卡片在构建时获取公开仓库数据快照，不可用字段显示短横线。后续将实现图片画廊与作品集。",1822,[75,1881,2139],"功能规划",[1871],{"path":1874,"stem":1878,"title":5,"description":1872,"wordCount":1886,"publish":1876,"update":1884,"cover":7,"tags":2142,"categories":2143,"series":1871,"seriesOrder":198,"pin":1875,"wip":1885,"theme":1883},[1881,369,1882],[1871],{"path":582,"stem":2145,"title":2146,"description":2147,"wordCount":2148,"publish":1876,"update":1946,"cover":7,"tags":2149,"categories":2151,"series":1871,"seriesOrder":191,"pin":1875,"wip":1885,"theme":1883},"posts\u002F1.markdown\u002F01.markdown","Markdown 教程","本文为 Markdown 教程，系统介绍常用语法：段落与换行、标题与目录生成、引用、无序\u002F有序\u002F任务列表、强调与行内代码、普通\u002F引用式\u002F自动链接、图片、代码块、表格、分隔线与转义，并说明本站 Nuxt Content 环境下文章文件位置、frontmatter 要求及后续扩展内容。",1449,[75,2150],"写作",[1871],1791108778908]