Re-ordering list elements

First, search the help docs and this forum. Maybe your question has been answered! The debugging steps can help, too. Still stuck? Delete this line and proceed.

What I’m trying to do

Hi everyone. Here’s what I’m working on to, and what I’m looking for.
I’m an art teacher preparing some quite “advanced” exams, and I’ve started to use Obsidian as I find it being an amazing versatile tool, with great visual-focused features (canvas & excalidraw), wich was important in my case.
but I’m still a newbie, with a close-to-zero experience when it comes to css and markdown, even if i don’t mind at all learning new skills.

I’ve started to build a list of quotes and citations from artists, thinkers, philosophers, etc, to help me memorize them. Since I’m doing it along my reading and studies, it happens more than once that I have several citations from the same author in a pretty unorganised way.

So I’m wondering if there’s a solution to re-organised those citations afterwards so they “match” or are “linked” in some sort of way when they are from the same author ?

Thanks already if anyone takes the time to read this and brings me some kind of answer.
(here’s some example of waht it looks like for now)

1. *C’est le monde des mots qui crée le monde des choses.* **Jacques Lacan**
<br>
2. *Où habitez vous ? Dans le langage et je ne peux me taire. En parlant, je me jette dans un ordre inconnu, étranger et j'en devient soudain responsable.* **Jean Luc Godard**
<br>
3. *Les miroirs feraient bien de réfléchir un peu plus avant de renvoyer les images.* **Jean Cocteau**
<br>
4.  *Avant Turner, il n'y avait pas de brouillard à Londres.*  **Oscar Wilde**
<br>
5.  *Les réalités de l'art ne reproduisent pas le réel avec plus de moins de tempérament, mais rendent visible une vision secrète.* **Paul Klee**
<br>
6.  *Tout d’abord, l’artiste n’accorde pas aux apparences de la nature la même importance contraignante que ses détracteurs réalistes. […] Peut-être est-il philosophe à son insu et s’il ne tient pas ce monde pour le meilleur des mondes possibles, il se dit toutefois : Sous cette forme reçue, il n’est pas le seul monde possible.* **Paul Klee**
<br>
7. *Essence et existence, imaginaire et réel, visible et invisible, la peinture brouille toutes nos catégories en déployant son univers onirique d’essences charnelles, de ressemblances efficaces de significations muettes.*  **Maurice Merleau-Ponty**
<br>
8. *Qu'est-ce que dessiner ? C'est l'action de se frayer un passage à travers un mur de fer invisible qui semble se trouver entre ce que l'on sent et ce que l'on peut. Il n'y a rien de plus artistique que d'aimer les gens. Il faut commencer par éprouver ce qu'on veut exprimer.* **Vincent Van Gogh**
<br>
9. *Méfiez vous de ceux dont vous comprenez tout, tout de suite. Il ne vous apprendront jamais rien.* **Jacques Lacan**
<br>
10. *JE N'ÉTAIS PAS LÀ LA NUIT OÙ J'AI ÉTÉ CONÇU. [...] Une image manque dans l'âme. Nous dépendons d'une posture qui a eu lieu de façon nécessaire mais qui ne se révélera jamais à nos yeux. On appelle cette image qui manque "L'ORIGINE". Nous la cherchons derrière tout ce que nous voyons.* **Pascal Quignard**
<br>
11. *L'authenticité de ce qui vient au jour dans la peinture est amoindrie chez nous, être humain, du fait que nos couleurs, il faut bien que nous allions les chercher les chercher là où elles sont, c'est à dire dans la merde. [...] Le créateur ne participera jamais qu'à la création D'UN PETIT DÉPÔT SALE, d'une succession de PETITS DÉPÔTS SALES JUXTAPOSÉS.* **Jacques Lacan**

https://imgur.com/a/bUJ0TLS

If you put the author’s name before the quote, you can sort the list alphabetically. The community plugin “Sort & Permute lines” can do the sorting. There may be other plugins that can do it; some external text editors also offer sorting.

(Obviously this doesn’t help much with your lists that already exist.)

Having a note like:

1. C’est le monde des mots qui crée le monde des choses. **Jacques Lacan**
2. Où habitez vous ? (...). **Jean Luc Godard**
3. Les miroirs feraient bien de réfléchir un peu plus avant de renvoyer les images. **Jean Cocteau**
4. Avant Turner, il n'y avait pas de brouillard à Londres. **Oscar Wilde**
5. Les réalités de l'art ne (...). **Paul Klee**
6. Tout d’abord, l’artiste n’accorde (...). **Paul Klee**
7. Essence et existence (...). **Maurice Merleau-Ponty**
8. Qu'est-ce que dessiner ? (...). **Vincent Van Gogh**
9. Méfiez vous de ceux dont vous comprenez tout (...). **Jacques Lacan**
10. JE N'ÉTAIS PAS LÀ LA NUIT OÙ J'AI ÉTÉ CONÇU. (...). **Pascal Quignard**
11. L'authenticité de ce qui vient (...). **Jacques Lacan**

You can use Dataview to create a view of the quotes (We are using the markdown bold characters **bold** to identify the author):

```dataview
LIST rows.quote
WHERE file = this.file
FLATTEN file.lists AS L
FLATTEN regexreplace(L.text, ".*?\\*\\*(.*?)\\*\\*.*", "$1") AS author
FLATTEN regexreplace(L.text, "\\*\\*(.*?)\\*\\*", "") AS quote
GROUP BY author```

Result:

- Jacques Lacan:
  - C’est le monde des mots qui crée le monde des choses.
  - Méfiez vous de ceux dont vous comprenez tout (...).
  - L'authenticité de ce qui vient (...).
- Jean Cocteau:
  - Les miroirs feraient bien de réfléchir un peu plus avant de renvoyer les images.
- Jean Luc Godard:
  - Où habitez vous ? (...).
  - Maurice Merleau-Ponty:
  - Essence et existence (...).
- Oscar Wilde:
  - Avant Turner, il n'y avait pas de brouillard à Londres.
- Pascal Quignard:
  - JE N'ÉTAIS PAS LÀ LA NUIT OÙ J'AI ÉTÉ CONÇU. (...).
- Paul Klee:
  - Les réalités de l'art ne (...).
  - Tout d’abord, l’artiste n’accorde (...).
- Vincent Van Gogh:
  - Qu'est-ce que dessiner ? (...).

Does that helps?

I just noticed the HTML breaks between your list items, which will be displaced if you sort as I suggest. I don’t know why you put them there but there is probably a better way to accomplish your goal.

Thanks a lot !

I’m still not very comfortable with data view, and the code used in this still is a bit jibberish to me, but I’ll look at some tutorials to get used to it.
sounds like the best solution indeed, and it will lead me to learn new things.

Like I said, I’m still an humble newbie, so have a lot to learn yet.

I used that
in my list, because I wanted to have some blank line between each citation, as I find it more comfortable to read this way, and apparently lists doesn’t display “jumped” lines between each item in reading mode.
idk, maybe it’s not the proper way to do it, but it was what i was able to do at the time.

hi and sorry to bother you again

i tried your code and so far, I got a “dataview ; No results to show for list query”, with no list displayed, after I typed the following code

LIST rows.quote 
WHERE file = "réflexions/citations.md"
FLATTEN file.lists AS L 
FLATTEN regexreplace(L.text, ".*?\\*\\*(.*?)\\*\\*.*", "$1") AS author 
FLATTEN regexreplace(L.text, "\\*\\*(.*?)\\*\\*", "") AS quote 
GROUP BY author

can’t figure out what I did wrong yet. Is it due to something in the file name and location ?

tl;dr I did get a little carried away, so you might just want to read the first few paragraphs, and skip the rest where I discuss alternatives to listing and presenting your quotes! :smiley:

@sanyaissues is referring to the current file, as you most likely have gathered, using the file = this.file syntax. If you want to refer to a given named file, you could use either of the following (just one of them at the time :slight_smile: ):

FROM "réflexions/citations.md"
WHERE file.name = "citations"
WHERE file.path = "réflexions/citations.md"

Where the middle one could pick up files having the same name but in a different folder. So try either first or last, and see if that doesn’t work a little better for you.


Just for the fun of it, here is also a slightly dirtier solution to get your quote and author, depending on your quotes not having bold text within the quote itself (which I believe is a dependency of the current version as well):


```dataview
LIST map(rows, (r) => r.parts[0])
WHERE file = this.file
FLATTEN file.lists as L
FLATTEN list(split(L.text, "\*\*")) as parts
GROUP BY parts[1]
```

On a side note, both of these solutions depends on doing text matching/splitting, whereas there is also an option to do this using inline fields, where the quotes lists could look more like:

1. [quote:: C'est le monde des ...], [author:: Jaques Lacan]
...
11. [quote:: L'authenticité de ce qui ... ], [author:: Jacques Lacan]

Which could be styled using CSS to look similar to your current output, and would lend itself for queries a lot better:

```dataview
LIST rows.L.quote
FLATTEN file.lists as L
GROUP BY L.author
```

Yet another version, which I’m using in my vault, is to use tasks like in the following:

- [q]  [quote:: C’est le monde des mots qui crée le monde des choses.], [author:: Jacques Lacan]
- [q]  [quote:: Où habitez vous ? Dans le langage et je ne peux me taire. En parlant, je me jette dans un ordre inconnu, étranger et j'en devient soudain responsable.], [author:: Jean Luc Godard]
- [q]  [quote:: Les miroirs feraient bien de réfléchir un peu plus avant de renvoyer les images.], [author:: Jean Cocteau]
- [q]  [quote:: Méfiez vous de ceux dont vous comprenez tout, tout de suite. Il ne vous apprendront jamais rien.], [author:: Jacques Lacan]

Which for me displays as:

Here I’ve opted for not displaying the field keys, no extra background color and italic and bold applied to the respective parts.

The CSS used to style the inline fields
.inline-field-key[data-dv-key="quote"],
.inline-field-key[data-dv-key="author"] {
 display: none;
}

.inline-field-key[data-dv-key="quote"] + .inline-field-value {
  background-color: inherit;
  font-style: italic;
}

.inline-field-key[data-dv-key="author"] + .inline-field-value {
  background-color: inherit;
  font-weight: 600;
}

Additional CSS is required to the quote character in front, which is customised for alternate checkboxes or decorated tasks as I like to call them. A proper discussion of that is shown elsewhere within this forum.

The query would now look like:

```dataview
LIST rows.T.quote
FLATTEN file.tasks as T
GROUP BY T.author
```

And if you wanted to list quotes from a single author you could do:

```dataview
TASK 
WHERE status="q" and author = "Jacques Lacan"
FLATTEN quote as visual
```

The FLATTEN lines removes the author, since that’s a given in this case :-), which leaves an output like:

1 Like

wow, thanks for letting yourself getting carrying away, as it was really educational ! since my first language is french, there are a lot of specific tehcnical words and vocabulary I have to assimilate, and when it’s linked to a precise exemple like this one, it does help a lot to understand things better.

I finaly went for your “inline fields” solution, as it seems to be more practical iand a better long-term solution.
I don’t go for Css style for now, as I plan to get into this later.

just one last question. Do I Have to type " [quote::] " and " [author::] " each time by hand, or is there a way to automate this.

and thanks again for takings some of your time to share all those solutions !

my bad, spoke too fast …

so I typed this in my citations file:

1. [quote:: *C’est le monde des mots qui crée le monde des choses.*] [author:: **Lacan, Jacques**]
2. [quote:: *Où habitez vous ? Dans le langage et je ne peux me taire. En parlant, je me jette dans un ordre inconnu, étranger et j'en devient soudain responsable.*] [author:: **Godard, Jean Luc**]
3. [quote:: *Les [[À propos du miroir|miroirs]] feraient bien de réfléchir un peu plus avant de renvoyer les images.*] [author:: **Cocteau, Jean**]
4.  [quote::*Avant Turner, il n'y avait pas de brouillard à Londres.*]  [author::**Wilde, Oscar**]
5.  [quote::*Les réalités de l'art ne reproduisent pas le réel avec plus de moins de tempérament, mais rendent visible une vision secrète.*] [author::**Klee, Paul**]
6.  [quote::*Tout d’abord, l’artiste n’accorde pas aux apparences de la nature la même importance contraignante que ses détracteurs réalistes. […] Peut-être est-il philosophe à son insu et s’il ne tient pas ce monde pour le meilleur des mondes possibles, il se dit toutefois : Sous cette forme reçue, il n’est pas le seul monde possible.*] [author::**Klee, Paul**]
7. [quote::*Essence et existence, imaginaire et réel, visible et invisible, la peinture brouille toutes nos catégories en déployant son univers onirique d’essences charnelles, de ressemblances efficaces de significations muettes.*] [author::**Merleau-Ponty, Maurice**]
8. [quote::*Qu'est-ce que dessiner ? C'est l'action de se frayer un passage à travers un mur de fer invisible qui semble se trouver entre ce que l'on sent et ce que l'on peut. Il n'y a rien de plus artistique que d'aimer les gens. Il faut commencer par éprouver ce qu'on veut exprimer.*] [author::**Van Gogh, Vincent**]
9. [quote::*Méfiez vous de ceux dont vous comprenez tout, tout de suite. Il ne vous apprendront jamais rien.*] [author::**Lacan, Jacques**]
10. [quote::*JE N'ÉTAIS PAS LÀ LA NUIT OÙ J'AI ÉTÉ CONÇU. [...] Une image manque dans l'âme. Nous dépendons d'une posture qui a eu lieu de façon nécessaire mais qui ne se révélera jamais à nos yeux. On appelle cette image qui manque "L'ORIGINE". Nous la cherchons derrière tout ce que nous voyons.*] [author::**Quignard, Pascal**]
11. [quote::*L'authenticité de ce qui vient au jour dans la peinture est amoindrie chez nous, être humain, du fait que nos couleurs, il faut bien que nous allions les chercher les chercher là où elles sont, c'est à dire dans la merde. [...] Le créateur ne participera jamais qu'à la création D'UN PETIT DÉPÔT SALE, d'une succession de PETITS DÉPÔTS SALES JUXTAPOSÉS.*] [author::**Lacan, Jacques**]
12. [quote::*J’ai commencé à sentir qu’en me regardant dans le [[À propos du miroir|miroir]], Je ne voyais plus du tout moi. C’était un sentiment à la fois étrange et euphorisant.*] [author::**Sherman, Cindy**]
13.  [quote::*l'image de cinéma n'est pas au présent. (cf. [[l'image temps - l'image mouvement|l'image temps]])*] [author::**Deleuze, Gilles**] 
14. [quote::*Chaque œuvre figurative, comme elle est une organisation spécifique de l'espace, est aussi une structure du temps.*] [author::**Souriau, Etienne**] in Vocabulaire d'esthétique. 
15. [quote::*Le problème avec le réel, c'est que nous savons ce que nous gagnons mais nous ignorons ce que nous gagnons.*] [author::**inconnu**] 
16. [quote::*Les Seules bonnes idées viennent en marchant*] [author::**Nietzche, Friedrich**]

but when I swith to reading mode, it gives me this instead, replacing all the quotes by the first one of the list ?

quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques in Vocabulaire d'esthétique.
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques
quoteC’est le monde des mots qui crée le monde des choses. authorLacan, Jacques

???

Use dataview to organize and visualize the quotes. Paste this in the same note:

```dataview
LIST 
    rows.L.quote
WHERE 
    file = this.file
FLATTEN 
    file.lists as L
GROUP BY 
    L.author ``` 

Or this in a new note:

LIST 
    rows.L.quote
FROM 
    "réflexions/citations.md"
FLATTEN 
    file.lists as L
GROUP BY 
    L.author ``` 

Restart obsidian. If problem persist update obsidian, and plugins. It should not behave like that. Which version are you using?

closing and starting again changed nothing :\
tried on mobile aswell, no success either.

problem disappear when I turn of dataview plug-in, either on PC or mobile

I’m on version 1.5.3

ps : I suspect it to be a problem from the plug-in in itself.
tried to use a list of [quotes::] in another test note, same problem ?
but when items are not in a List, problem disappears

for ex

1. [author:: bob]
2. [author:: denise]

will give me

  1. authorbob
  2. authorbob

in reading mode

but

[author:: bob]
[author:: denise]

will give me

authorbob
authordenise

confused face

Seems like a bug

But don’t let that stop you. Keep a file with all your quotes with the inline tags and create a new one with the dataview snippet to visualize them. They will probably fix the bug later.

I think this could be related to you doing [ ... ] [ ... ] which indeed triggers a bug. If you add a comma, so that it reads [ ... ], [ ... ] I think you can circumvent the bug until it is fixed. If I remember correctly it’s somehow related to some strangeness as the double bracket combination is confused somehow with links or something like that.

In short, add something inbetween two inline fields when they appear after each other in a list.

Actually the bug persists. This list:

- [quote:: Quote one.] — [author:: Author one]
- [quote:: Quote two.] — [author:: Author two]

Is redendered as:

- quote Quote one. — author Author one
- quote Quote one. — author Author one

But if we add another field as the first list item :

- [field:: foo] 
- [quote:: Quote one.] — [author:: Author one]
- [quote:: Quote two.] — [author:: Author two]

The other fields will render fine:

- field foo
- quote Quote one. — author Author one
- quote Quote two. — author Author two

Ah, OK. You can make Reading View show more space there by using a CSS snippet. In Markdown when you put blank lines between list items in the editor it marks the list item content as a paragraph (this is a less well-known feature of Markdown). Typically this would add space between them; Obsidian ignores that but they are still paragraphs so you can target them for styling. There should be a snippet posted somewhere thatbyou can use — I’ll see if I can find it.

EDIT: Couldn’t find it but @FireIsGood made one for us:

/* Restore Markdown "loose list" styling. 
Courtesy of @fireisgood https://discord.com/channels/686053708261228577/702656734631821413/1191537686754906203 */

:root:root:root li > :is(p, .list-bullet) {
    margin-block: var(--p-spacing);
}

yes, even with a - or a , the bug still persisted, but your solution actually worked !
thanks once again for your returns and help ! meta data seems once again a more practical and versatile solution, and such advices were what I needed to finaly get into it a bit !

Perfect! Also you can use alternative parenthesis syntax, which hides the key when rendered in Reader mode:

- (Title:: Quotes:) 
- (quote:: Quote one.) — (author:: Author one)
- (quote:: Quote two.) — (author:: Author two)

Will render as:

Quotes:
Quote one. — Author one
Quote two. — Author two
1 Like