Remark: Problema de renderização matemática

Criado em 5 fev. 2021  ·  3Comentários  ·  Fonte: gnab/remark

Oi,

Remark.js é realmente ótimo para gerar slides, mas tenho problemas para integrar fórmulas matemáticas em slides (com katex ou mathjax).
Os exemplos dados no wiki funcionam bem, mas muitas fórmulas não podem ser exibidas corretamente. Por exemplo, usar o símbolo double \sum não funciona. Nos exemplos, alterar $$e^{ipi} + 1 = 0$$ por $$\sum_{i = 1}^n \sum_{j = 1}^n x_{ij} = 0$$ não funciona mais.
Existe uma maneira de incluir fórmulas mais complexas nos slides? O problema não vem do mathjax e do katex em geral porque eles podem exibir esse tipo de fórmula (com soma dupla, por exemplo).

Melhor,
Mathieu

latex

Comentários muito úteis

Oi,

Procurei mais detalhes sobre o problema e encontrei o problema, mas não consigo corrigi-lo (meu javascript não é bom o suficiente para isso :cry:).
Quando uma fórmula matemática contém 2 sublinhados e símbolos de chave, os sublinhados são substituídos pelas tags html <em> e </em> na saída html por remarkjs.

Por exemplo, suponha que o markdown do código contenha:

1. This is a product \\(x_1 \times x_2\\) which works!
2. This is a product \\(x_1 \times x_{12}\\) which doesn't work!

A saída HTML do remark.js é a seguinte:

<ol>
<li>This is a product \(x_1 \times x_2\) which works!</li>
<li>This is a product \(x<em>1 \times x</em>{12}\) which doesn't work!</li>
</ol>

e assim a segunda fórmula matemática não pode ser exibida corretamente!

Espero que ajude na correção do bug.

Melhor,
Mathieu

Todos 3 comentários

Oi,

Procurei mais detalhes sobre o problema e encontrei o problema, mas não consigo corrigi-lo (meu javascript não é bom o suficiente para isso :cry:).
Quando uma fórmula matemática contém 2 sublinhados e símbolos de chave, os sublinhados são substituídos pelas tags html <em> e </em> na saída html por remarkjs.

Por exemplo, suponha que o markdown do código contenha:

1. This is a product \\(x_1 \times x_2\\) which works!
2. This is a product \\(x_1 \times x_{12}\\) which doesn't work!

A saída HTML do remark.js é a seguinte:

<ol>
<li>This is a product \(x_1 \times x_2\) which works!</li>
<li>This is a product \(x<em>1 \times x</em>{12}\) which doesn't work!</li>
</ol>

e assim a segunda fórmula matemática não pode ser exibida corretamente!

Espero que ajude na correção do bug.

Melhor,
Mathieu

Olá Mathieu,

Obrigado pela sua visão sobre o problema. Uma solução (feia) é adicionar uma barra invertida para escapar de cada sublinhado. Por exemplo, o seguinte funciona para mim.

$$\sum\_{i = 1}^n \sum\_{j = 1}^n x\_{ij} = 0$$ 

Espero que alguém possa corrigir o problema original.

Olá Fred,

Muito obrigado pela dica!!!
Não ficou claro (pelo menos para mim :smile:) que todos os caracteres especiais como \ e _ deveriam ser escapados.

Meu objetivo seria escrever fórmulas de látex sem escapar de nada. Como primeiro passo, modifiquei meu arquivo html (não consigo nem compilar o projeto, então não posso tentar modificar o código-fonte da observação) para evitar escapar de cada sublinhado e de cada \ nas fórmulas delimitado por $ ou $$ . Por $$ .
Portanto, agora você pode escrever algo como:

$$\begin{array}{ll}
\max & x_1 + 3x_2\\
s.t & 6x_1 + 7 x_2 \leq 18\\
& 3x_{34} + 3x_{23} \leq 27\\
& x \geq 0
\end{array}
$$
````
and it works! If for some reason, you have trouble with this preprocessing, you just need to delimit your formulas with `\\(` and `\\)` (inline case) or with `\\[` and `\\]`.

Here is my code to add in the html file (at the beginning of the scipt, before `remark.create()`):
```js
    function replaceBsInline(match, p1, offset, string){
      return "\\\\(" + p1.replaceAll("_", "\\_") + "\\\\)";
    } 


    function replaceBs(match, p1, offset, string){
      p1 = p1.replaceAll("\\\\", "\\\\\\\\");
      s = "\\\\[" + p1.replaceAll("_", "\\_") + "\\\\]";
      return s;
    }

    s = document.body.innerHTML;
    s = s.replaceAll(/\$\$([^]+?)\$\$/g, replaceBs);
    s = s.replaceAll(/\$(.+?)\$/g, replaceBsInline);
    document.body.innerHTML = s;

Eu só tentei com duas fórmulas, então não posso garantir os resultados em nenhum caso!

Melhor,
Mathieu

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

donquixote picture donquixote  ·  5Comentários

utdrmac picture utdrmac  ·  6Comentários

dvberkel picture dvberkel  ·  5Comentários

peterj picture peterj  ·  6Comentários

mikepqr picture mikepqr  ·  6Comentários