Сортировка авторов по фамилии в Tiddlywiki
Было бы хорошо отсортировать списки по фамилии автора.
У меня есть этот код в одном из тиддлеров, он перечисляет все тиддлеры с тегом "автор" и сортирует по алфавиту:
<$list filter='[tag[author]sort[title]]'>
</$list>
например
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 ответа
Простой вариант: добавить поле ByLastName, заполненное так, как вы хотите, и отсортировать по нему.
Средний вариант: ввести понятие сгенерированных полей в tiddlywiki.
Жесткий вариант: измените фильтр сортировки так, чтобы он вызывал макрос с указанными вами данными, а затем сортируйте исходный список на основе результатов.
В последних версиях TiddlyWiki это можно сделать с помощью
sortsub
оператор , который сортирует на основе результатов применения выражения фильтра к входным данным. Обратите внимание, что когда вы используете этот оператор (или любой другой оператор, который принимает подфильтр), вы должны определить подфильтр с помощью макроса , иначе TiddlyWiki не сможет указать, какие квадратные скобки являются частью основного фильтра, а какие - частью. подфильтр.
Вот минимальная рабочая версия:
\define myfilt() [split[ ]last[]]
<$list filter="[tag[author]sortsub<myfilt>]">
...
</$list>
Чтобы дисплей отображался как «Фамилия, Имя», как в вашем примере, а не просто отображал заголовок тиддлера как есть:
\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[]
так что если у кого-то более двух имен, средние идут в конце, а не исчезают). Затем мы создаем ссылку, текст которой представляет собой эту новую отформатированную версию, а целью является исходное имя тиддлера.