如何在TiddlyWiki列表项中实现多重条件文本格式设置?
TiddlyWiki多格式叠加模板优化方案
你遇到的嵌套<$macrocall>转义问题可以通过级联更新输出变量的方式彻底解决,无需处理多层引号转义,可支持任意数量的叠加格式规则。
优化后完整模板代码
\define strike(text:"") ~~$text$~~ \end \define grey(text:"") @@.empty $text$ @@ \end \define normal(text:"") $text$ \end <!-- 通用格式应用宏,无需修改 --> \define apply-format() <$let current-content=<<__content__>> format-type=<<__format__>> > <$macrocall $name=<<format-type>> text=<<current-content>> /> \end <!-- 初始化基础内容为条目链接 --> <$let output=<$link/>> <!-- 规则1:带skip标签的内容加删除线 --> <$list filter="[<currentTiddler>tag[skip]]" emptyMessage="<$let output=<<output>>/>"> <$let output=<<apply-format content=<<output>> format:"strike">>/> </$list> <!-- 规则2:无正文的内容变灰色 --> <$list filter="[<currentTiddler>!has[text]]" emptyMessage="<$let output=<<output>>/>"> <$let output=<<apply-format content=<<output>> format:"grey">>/> </$list> <!-- 规则3:带spoiler标签的内容应用剧透格式 --> <$list filter="[<currentTiddler>tag[spoiler]]" emptyMessage="<$let output=<<output>>/>"> <$let output=<<apply-format content=<<output>> format:"spoiler-inline">>/> </$list> <!-- 规则4:带event标签的内容加前缀箭头 --> <$let arrow={{{ [<currentTiddler>tag[event]then[→ ]else[]] }}}> <!-- 最终输出 --> <<arrow>> <<output>>
新增格式规则的方法
- 先定义你需要的格式宏,比如要实现重要内容标红:
\define red(text:"") @@color:red; $text$ @@ \end
- 在规则区域复制一段
<$list>逻辑,修改触发条件和格式名即可,比如:
<!-- 新增规则:带important标签的内容标红 --> <$list filter="[<currentTiddler>tag[important]]" emptyMessage="<$let output=<<output>>/>"> <$let output=<<apply-format content=<<output>> format:"red">>/> </$list>
规则的前后顺序决定了格式的叠加顺序,可根据需要自行调整。
内容的提问来源于stack exchange,提问作者Takiro
相关产品推荐
相关产品推荐

