· 3 min read draft

怎麼在這個站發文(給我自己看的)

新增一篇文章的完整流程、frontmatter 欄位說明,以及所有可用的 Markdown 語法示範:程式碼、數學式、表格、註腳。


這篇是操作手冊,draft: true 所以不會出現在文章列表和 RSS,但用網址還是打得開。

發一篇新文章

cd ~/website
# 1. 建檔(檔名就是網址:/blog/my-post-slug)
vim src/content/blog/my-post-slug.md
# 2. 發布
./publish.sh

publish.sh 會 build 然後同步到 nginx 的目錄,大概十幾秒。

想邊寫邊看:

cd ~/website && npm run dev
# 開 http://127.0.0.1:4321 (或從外面連 http://192.168.31.87:4321)

Frontmatter 欄位

每篇開頭這一段是必要的:

---
title: '標題'                    # 必填
description: '一到兩句話的摘要'    # 必填,會出現在列表、SEO、RSS
pubDate: 2026-08-28              # 必填
updatedDate: 2026-09-01          # 選填,有改過再加
tags: ['zh-tw', 'tokenizer']     # 選填,會自動產生 /tags/xxx 頁
lang: 'zh-Hant'                  # 選填,預設 zh-Hant,英文文章寫 'en'
draft: true                      # 選填,true = 不進列表 / RSS / 搜尋引擎
featured: true                   # 選填,保留欄位
---

欄位打錯或少填,build 會直接失敗並告訴你哪一篇哪一行——這是故意的,比默默發出壞掉的頁面好。

程式碼

三個反引號加語言名稱,會自動上色(淺色深色主題都有處理):

from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("lianghsun/tw-tokenizer-v1")
ids = tok("行政院農業委員會今日公告").input_ids
print(len(ids))

行內程式碼用單個反引號:per_device_train_batch_size=4

數學式

行內用 $...$:模型的 loss 是 L=tlogp(xtx<t)\mathcal{L} = -\sum_t \log p(x_t \mid x_{<t})

獨立一行用 $$...$$

LGRPO=Eq,{oi}[1Gi=1Gmin(riAi, clip(ri,1ϵ,1+ϵ)Ai)]\mathcal{L}_{\text{GRPO}} = \mathbb{E}_{q,\{o_i\}}\left[\frac{1}{G}\sum_{i=1}^{G} \min\left(r_i A_i,\ \text{clip}(r_i, 1-\epsilon, 1+\epsilon) A_i\right)\right]

表格

ModelTMMLU+tw-legal壓縮率
baseline41.233.81.00×
+ CPT44.739.11.00×
+ 新 tokenizer44.539.61.46×

表格太寬會自己變成可橫向捲動,不會撐破版面。

引用與重點

分數看起來漂亮的時候,先去看 per-question 的 jsonl,再決定要不要相信它。

粗體斜體刪除線連結 都照 Markdown 標準走。

圖片

圖放 public/img/,文章裡用絕對路徑引用:

![壓縮率比較](/img/tokenizer-compression.png)

圖片會自動加圓角和邊框。

標題與目錄

##### 會自動進右邊的目錄(超過兩個標題才顯示),捲動時會跟著高亮。# 不要用——文章標題已經是 h1 了。

改設計或內容

想改什麼檔案
顏色、字體、間距src/styles/global.css(最上面的 tokens)
名字、簡介、社群連結src/data/site.ts
Work 頁面的模型 / 資料集 / 專案src/data/work.ts
About 頁面內文src/pages/about.astro
首頁排版src/pages/index.astro

改完一樣跑 ./publish.sh