<aside> 💡 如何用 Notion 做一份课程表?你可以用表格视图,每一列分别是星期一、星期二、星期三……但如果涉及单双周或者需要关联,就比较麻烦了。这里介绍一种看板视图的实现方法,将课程表与课程数据库相关联,还可实现单双周。涉及了不少有趣的小技巧,相信看完一定会有收获~
</aside>

想使用这个课程表,请 duplicate 以下页面到自己的工作区,然后参照页内使用说明操作。
[Notion 课程表模板 by Niin](https://niin.notion.site/Notion-by-Niin-f389f7e743b44fe69a322707c1d01109)
想了解更多原理,请对照模板继续阅读。
以下无特殊说明均为课程表数据库中属性:
星期 :星期几如何按“一、二、三、四……”不按字典顺序排序?一般的文本属性排序时,会按字母表进行字典排序,但根据单选属性排序时,顺序由单选属性的选择面板决定,可以自己上下拖动。节数 :这里用了数字属性。为什么不把节数放在标题列,用 formula 获取数字呢?因为数据库制作过程涉及 duplicate,标题的属性会变成 "Copy of ...",遂直接标题留空。如果觉得留空不舒服,也可以 formula 得到星期几第几节,复制到标题,但其实没有必要。上课时间 :根据事先填入的 时间文本 和 节数 得到这节课对应的时间段值。用到正则,先在最前面加一个 "," 代表首项为空,然后去除前 n 项 "^(.*?,){" + format(prop("节数")) + "}",再去除首项后内容 ",.*$" ,这样超过范围时会为空。另外增加去除空格,增强鲁棒性。显示 :checkbox 指示条目是否需要,一方面根据时间段个数,另一方面可更改函数选择是否需要星期六和星期日。时间段个数通过 , 个数 +1 获得,即 length(replaceAll(prop("时间文本"), "[^,]", "")) + 1 ,为增加鲁棒性,考虑最后也加了逗号的情况,将 +1 修改为 + ((slice(prop("时间文本"), length(prop("时间文本")) - 1) == ",") ? 0 : 1) 。单周的课 & 双周的课:对于一个特定时间段,单双周的情况可分为:每周相同课,只在单周或双周有课,单双周不同课。这两个 formula 区别只在于一个 单 和 双,还有一个 $1 和 $2。
课程 属性含有 ,  。但如果课程名称中含有英文逗号,结果就可能出错。因此我在课程数据库中增加了 课程加符号 属性,先给每个课程加上了 <>,再正则匹配 "^<(.+?)>,<(.+?)>$",就不容易出问题了(注意 rollup 的结果中,逗号后无空格)。此时单双周的课程分别为 $1 和 $2 。Count not empty 。本周的课 : formatDate(now(), "w") 获取现在是今年第几周,再间隔显示单双周课表。因此需要初始设定除以 2 的余数为 0 或 1。