Mathjax: Diga ao MathJax para processar apenas nós específicos

Criado em 3 fev. 2019  ·  6Comentários  ·  Fonte: mathjax/MathJax

Apenas alguns nós HTML em meu site realmente contêm LaTeX, então eu gostaria de ser capaz de dizer ao MathJax para processar apenas esses. O que eu gostaria de poder fazer é algo assim:

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

Mas, em vez disso, a única maneira de obter o resultado que desejo é

  1. Adicione uma classe ao <body> - "nomathjax" ou algo assim.
  2. Use a propriedade ignoreClass para excluir a página inteira.
  3. Adicione uma classe às tags <article> como "yesmathjax".
  4. Use a propriedade processClass para incluir essas tags novamente.

São os passos (2) e (4) que me incomodam. Meu HTML é meu. Eu sou meticuloso com isso. Eu tenho isso bonito, limpo e mínimo, do jeito que eu gosto. Não quero ter que adicionar classes CSS sem sentido só porque uma biblioteca que estou usando precisa de mim. Na verdade, em meu caso de uso específico, é impossível para mim fazer isso - não posso modificar o corpo da página, tudo que posso fazer é inserir

Question

Comentários muito úteis

Você pode usar

(e deve ser colocado ANTES do script que carrega o próprio MathJax.js). Isso restringirá as operações de composição do MathJax ao conteúdo dos elementos especificados. É uma propriedade global porque se aplica a TODOS os pré-processadores.

Todos 6 comentários

Você pode usar

(e deve ser colocado ANTES do script que carrega o próprio MathJax.js). Isso restringirá as operações de composição do MathJax ao conteúdo dos elementos especificados. É uma propriedade global porque se aplica a TODOS os pré-processadores.

Incrível! Estive mergulhado em documentos sobre filas e pré-processadores na última hora. Os resultados do Google neste tópico realmente pareciam sugerir que não havia outra maneira de fazer isso a não ser processClass . É hora de atualizar alguns threads do StackOverflow, eu acho.

O problema com a solução @dpvc é que, se nenhum elemento for encontrado, o mathjax retornará ao comportamento padrão de tentar processar todo o DOM.

O problema com a solução @dpvc é que, se nenhum elemento for encontrado, o mathjax retornará ao comportamento padrão de tentar processar todo o DOM.

Existe uma maneira de contornar isso?

Claro, um hack como passar uma matriz de um único nó fictício (ou seja,
[document.createElement ('div')) se não houver correspondências (ou seja, nodes.length
=== 0). Mas mathjax pode fazer com que a passagem de nulo signifique não processar nada para
tornar isso menos hackish, sem uma alteração significativa (embora uma API melhor
faria o oposto, nulo processaria tudo e matriz vazia processaria nada).
Meu 2c

Uma maneira possível de lidar com o caso em que pode não haver elementos do tipo fornecido é a seguinte:

<script type="text/x-mathjax-config">
(function () {
  var articles = document.getElementsByTagName("article");
  MathJax.Hub.Config({
    elements: articles,
    skipStartupTypeset: (articles.length === 0)
  });
})();
</script>
Esta página foi útil?
0 / 5 - 0 avaliações