Mathjax: Sagen Sie MathJax, dass es nur bestimmte Knoten verarbeiten soll

Erstellt am 3. Feb. 2019  ·  6Kommentare  ·  Quelle: mathjax/MathJax

Nur bestimmte HTML-Knoten auf meiner Site enthalten tatsächlich LaTeX, daher möchte ich MathJax anweisen, nur diese zu verarbeiten. Was ich gerne machen möchte, ist so etwas:

<script>
    MathJax.Hub.Config({
        tex2jax: {
            restrict: document.getElementsByTagName("article")
        }
    });
</script>

Aber stattdessen kann ich nur das gewünschte Ergebnis erzielen:

  1. Fügen Sie dem <body> eine Klasse hinzu - "nomathjax" oder so.
  2. Verwenden Sie die Eigenschaft ignoreClass , um die gesamte Seite auszuschließen.
  3. Fügen Sie eine Klasse zu den <article> Tags wie "yesmathjax" hinzu.
  4. Verwenden Sie die Eigenschaft processClass , um diese Tags wieder einzuschließen.

Es sind die Schritte (2) und (4), die mich stören. Mein HTML gehört mir. Ich bin pingelig. Ich habe es schön sauber und minimalistisch, so wie ich es mag. Ich möchte keine bedeutungslosen CSS-Klassen hinzufügen müssen, nur weil eine Bibliothek, die ich verwende, dies erfordert. Tatsächlich ist es in meinem speziellen Anwendungsfall unmöglich für mich - ich kann den Seitenkörper nicht ändern, ich kann nur einfügen

Question

Hilfreichster Kommentar

Sie können verwenden

(und muss VOR dem Skript platziert werden, das MathJax.js selbst lädt). Dadurch werden MathJax-Satzoperationen auf den Inhalt der angegebenen Elemente beschränkt. Sie ist eine globale Eigenschaft, da sie auf ALLE Präprozessoren angewendet wird.

Alle 6 Kommentare

Sie können verwenden

(und muss VOR dem Skript platziert werden, das MathJax.js selbst lädt). Dadurch werden MathJax-Satzoperationen auf den Inhalt der angegebenen Elemente beschränkt. Sie ist eine globale Eigenschaft, da sie auf ALLE Präprozessoren angewendet wird.

Fantastisch! Ich habe mich in der letzten Stunde hüfttief mit Dokumenten über Warteschlangen und Vorprozessoren beschäftigt. Die Google-Ergebnisse zu diesem Thema schienen wirklich darauf hinzudeuten, dass es keine andere Möglichkeit gibt als processClass . Zeit, einige StackOverflow-Threads zu aktualisieren, denke ich.

Das Problem mit der @dpvc- Lösung besteht darin, dass mathjax auf das Standardverhalten zurückgreift, bei dem versucht wird, das gesamte DOM zu verarbeiten, wenn keine Elemente gefunden werden.

Das Problem mit der @dpvc- Lösung besteht darin, dass mathjax auf das Standardverhalten zurückgreift, bei dem versucht wird, das gesamte DOM zu verarbeiten, wenn keine Elemente gefunden werden.

Gibt es einen Weg, das zu umgehen?

Sicher, ein Hack wie das Übergeben eines Arrays eines einzelnen Dummy-Knotens (dh
[document.createElement('div')) wenn es keine Übereinstimmungen gibt (dh node.length
=== 0). Aber Mathjax könnte dazu führen, dass das Übergeben von Null bedeutet, dass nichts verarbeitet wird an
Machen Sie dies weniger hackisch, ohne eine brechende Änderung (obwohl eine bessere api
würde das Gegenteil tun, null verarbeiten alle und leere Arrays verarbeiten nichts).
Mein 2c

Eine Möglichkeit, den Fall zu behandeln, in dem möglicherweise keine Elemente des angegebenen Typs vorhanden sind, ist die folgende:

<script type="text/x-mathjax-config">
(function () {
  var articles = document.getElementsByTagName("article");
  MathJax.Hub.Config({
    elements: articles,
    skipStartupTypeset: (articles.length === 0)
  });
})();
</script>
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen