Probleme


Wo Jekyll versagt...
Ekkart Kleinod  • 

Auf dieser Seite

Diese Seite soll kein Jekyll-Bashing sein, sondern eine Aufstellung der Probleme, die ich mit Jekyll habe und meiner Lösungen, falls ich welche gefunden habe.

Das Navigationsproblem hat dazu geführt, dass ich Jekyll aufgebe und langfristig zu Lektor wechsele.

Code-Blocks

Jekyll generiert Code-Blocks mit Umbruch und ohne die Höhe zu begrenzen. Das ist blöd bei langen Texten. Egal ist, ob man die Kurznotation (~~~) oder die lange nimmt:

Kurznotation (kramdown):

~~~ latex
\documentclass{srcartcl}
... (langer Text, sowohl breit als auch hoch)
~~~

Langnotation (Liquid):

{% highlight latex %}
\documentclass{srcartcl}
... (langer Text, sowohl breit als auch hoch)
{% endhighlight %}

Erste Möglichkeit: Zeilennumerierung einschalten, dann wird der Text in einer Tabelle gesetzt und der horizontale Umbruch entfällt, stattdessen wird dort ein Scrollbalken angezeigt. Zeilennumerierung funktioniert nur mit der Langnotation.

{% highlight latex linenos %}
\documentclass{srcartcl}
... (langer Text, sowohl breit als auch hoch)
{% endhighlight %}

Weiter bin ich noch nicht.

Wie man einen Webseitengenerator bauen kann und keine(!) Unterstützung für Navigation einbauen kann, ist mir ein Rätsel. Zwei Ansätze sind vielversprechend: nur mit Liquid arbeiten und als include benutzen oder ein Plugin in Ruby schreiben.

Beide habe ich noch nicht vollständig zum Laufen gebracht.

Das Navigationsproblem hat dazu geführt, dass ich Jekyll aufgebe und langfristig zu Lektor wechsele.

Liquid-Lösung

Das Problem: Liquid ist keine richtige Programmiersprache (und will es auch nicht sein) und hat keine Möglichkeiten zur Rekursion oder zum vernünftigen Scoping von Variablen. Das macht die Programmierung schwierig.

Die Hauptnavigation ist derzeit ohne Unterseiten als Liquid-include konzipiert:

{% comment %}
    Store pages for output.
    Compare array size to 2 for root navigation only.
{% endcomment %}
{% assign pages_sorted = site.pages | sort: 'title' %}
{% assign pages_out = '' | split: '' %}
{% for page in pages_sorted %}
    {% assign url_array = page.url | split: '/' %}
    {% if page.hide-nav != true and url_array.size == 2 %}
        {% assign pages_out = pages_out | push: page %}
    {% endif %}
{% endfor %}

{% if pages_out.size > 0 %}

<ul class="nav navbar-nav navbar-right">
    {% for page in pages_out %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endfor %}
</ul>

{% endif %}

Plugin-Lösung

Das Problem: ich kann (noch) kein Ruby. Und ich bin mir noch nicht sicher, wo man die Plugins überall nutzen kann, das Plugin funktioniert beispielsweise auf Seiten aber nicht auf Unterseiten oder in includes. Seltsam.