Fuga dalle doppie parentesi graffe all'interno di un blocco di codice markdown in Jekyll


89

Sto usando Jekyll per creare un sito di documentazione in cui cerco di documentare del codice che contenga la sintassi simile a un manubrio. Ad esempio {{foo}}. Il problema è che Jekyll utilizza tag liquidi e non importa quello che faccio, i miei doppi ricci vengono strappati dal processore liquido.

A proposito, sto usando kramdown come processore di markdown.

Ecco qualcosa che ho provato:

{% highlight html linenos %}
  Hello, my name is {{name}}.
{% endhighlight %}

Questo rimuove completamente la sezione {{name}} perché pensa che sia un riferimento a una variabile liquida.

Ho provato anche questo:

{% highlight html linenos %}
  Hello, my name is \{\{name\}\}.
{% endhighlight %}

In questo caso, sto cercando di evitare le parentesi graffe, ma il risultato è che le barre vengono visualizzate nella pagina.

Ho anche provato questo:

{% highlight html linenos %}
  Hello, my name is <span>{</span>{name}}.
{% endhighlight %}

Certo, questo era piuttosto stupido. In questo caso, poiché ho specificato la sintassi come html (che deve essere), il tag span viene visualizzato nella pagina.

Allora come nel mondo posso risolverlo?

Risposte:


184

Stai cercando il {% raw %}tag.

{% raw %}
Hello, my name is {{name}}.
{% endraw %}

6
Ah HAH! Sei il mio nuovo migliore amico.
rescuecreative

Grazie, questo è esattamente quello che voglio.
wukong

Grazie ... questo mi stava facendo impazzire.
learningMachine

E se il codice che vuoi esacape fosse {% raw %} {{...}} {% endraw %}come quello che potresti trovare in un post sul blog che discute proprio di questo argomento?
Starfry

3
@starfry: Divertente dovresti chiedere ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks

33

Puoi utilizzare {% raw %}per assicurarti che il contenuto non venga modificato da Jekyll:

{% raw %}
This is inserted literally: {{foo}}
{% endraw %}

Tuttavia, tieni presente che questo non è un blocco di codice . Avrai bisogno di una formattazione del codice aggiuntiva per rendere il contenuto visualizzato come codice:

{% raw %}
    I'm a code block, because I'm indented by 4 spaces
{% endraw %}
{% raw %}
```handlebars
I'm a code block that contains {{handlebars}}
with highlighting.
```
{% endraw %}

Grazie per questa aggiunta. Ho finito per fare qualcosa di un po 'più brutto di quello come {% raw %}{{ foo }}{% endraw %}per ogni evento, quindi darò un'occhiata a quello che hai fatto qui.
rescuecreative

Questa è una soluzione più flessibile, in quanto consente di mantenere il blocco di codice e la sua sintassi.
Kiddo

20

Con jekyll il codice è:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}

Questa è la soluzione esatta. Grazie!
Jerad Rutnam

degno di nota: quanto sopra funziona, anche con l'illuminante Rouge. Tuttavia, il raw non funziona se si utilizza la sintassi fencing per l'evidenziazione del codice (tre backtick iniziali come `` html ...)
Frank Nocke

5

Per riferimenti futuri: utilizzare plain {% raw %}ed {% endraw %}è solo la seconda migliore soluzione poiché vengono mostrati se si cerca il Markdown sul normale github.com.

Il modo migliore è inserire {% raw %}e {% endraw %}nei commenti HTML:

<!-- {% raw %} -->
something with curlky brackets like { this } and { that }
<!-- {% endraw %} -->

A causa dei commenti HTML, viene visto da Github come un commento. Nelle pagine Github i tag grezzi impediranno l'analisi delle parentesi graffe tra i tag.


3

Funziona in jekyll :

{%raw%}{{thing}}{%endraw%}

Cordiali saluti, ho incluso la tripla citazione per dimostrare che un blocco di codice all'interno di Jekyll avrebbe funzionato. Non si intendeva creare un blocco di codice nella risposta :)
Lisa Sinclair
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.