在Tiddlywiki中通过姓氏对作者进行排序

时间:2017-06-20 14:48:52

标签: tiddlywiki tiddlywiki5

使用作者的姓氏对列表进行排序会很好。

我在其中一个Tiddlers中有这个代码,它列出了所有被标记的Tiddlers' author'并按字母顺序排序:

<$list filter='[tag[author]sort[title]]'>

</$list>

e.g。

Adam Robinson
Andrew Adonis
Benjamin Franklin
Dale Carnegie
Daniel Priestley
George Leonard

我希望列表按姓氏排序,所以它看起来像这样:

Adonis, Andrew 
Carnegie, Dale
Franklin, Benjamin
Leonard, George
Priestley, Daniel
Robinson, Adam 

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:0)

简易选项:添加一个ByLastName字段,填充您想要的方式并对其进行排序。

中等选项:将生成的字段的概念引入tiddlywiki。

硬选项:修改排序过滤器以使用您指定的任何数据调用宏,然后根据结果对原始列表进行排序。

答案 1 :(得分:0)

在 TiddlyWiki 的最新版本中,您可以使用 sortsub operator 执行此操作,它根据将过滤器表达式应用于输入的结果进行排序。请注意,当您使用此运算符(或任何其他带有子过滤器的运算符)时,您必须使用 macro 定义子过滤器,否则 TiddlyWiki 无法判断哪些方括号是主过滤器的一部分和它们是子过滤器的一部分。

这是一个最小的工作版本:

\define myfilt() [split[ ]last[]]

<$list filter="[tag[author]sortsub<myfilt>]">
  ...
</$list>

要使显示显示为“姓氏,名字”,如您的示例中所示,而不仅仅是按原样显示 tiddler 的标题:

\define myfilt() [split[ ]last[]]

<$list filter="[tag[author]sortsub<myfilt>]">
  <$set name=formattedName value={{{ [all[current]split[ ]last[]addsuffix[, ]] [all[current]split[ ]butlast[]] +[join[]] }}}>
    <$link to=<<currentTiddler>>><<formattedName>></$link><br>
  </$set>
</$list>

我们使用 {{{ triple curly braces }}} 中的过滤器计算新格式并将其分配给一个变量(注意使用 butlast[] 而不是 first[] 以便如果某人有两个以上的名字,中间的会在最后而不是消失)。然后我们创建一个链接,其文本是新格式的版本,其目标是原始 tiddler 名称。