Last updated on: April 17, 2021
Also available as a single HTML file
$Paragraphs = QueryObjects("Paragraph", GetCurrentPage()) SortObjects($Paragraphs, "text", true)
This macro will sort every paragraph in the current page alphabetically (property "text" was provided in the second parameter) in ascending order (true was provided in the last parameter).
Custom Sort Orders
You can also define custom sort orders by making use of arrays. Below macro will sort each paragraph by the second letter that appears in the paragraph:
$Paragraphs = QueryObjects("Paragraph", GetCurrentPage()) $SecondLetters = Array() ForEach ($Paragraph in $Paragraphs) Array_PushBack($SecondLetters, String_SubString($Paragraph.text, 1, 1)) SortObjects($Paragraphs, $SecondLetters, true)
For the custom sorting, the second parameter to SortObjects must be an array that has indices 0 to number of elements being sorted. Each corresponding value in the array will then be compared to determine the order.
Sorting Objects that aren't Siblings
When sorting objects that are not under the same parent object, they are sorted only within their siblings. For instance if you try to sort all pages in current notebook, they will be sorted within each section and they won't move between sections. Similarly if you sort paragraphs in a page, paragraphs in same outline will be sorted together but not across outlines. This is the desired behavior for most cases and will prevent simple mistakes to mix everything up on your pages or notebooks.