mathjax обрабатывается по-разному в названии и содержании сообщений с помощью Jekyll

#regex #markdown #jekyll #mathjax

#регулярное выражение #уценка #jekyll #mathjax

Вопрос:

Я пытаюсь понять Jekyll.

Я использую Kramdown в качестве процессора markdown.

Существует странная разница в том, как mathjax обрабатывается в заголовке и содержимом.

Скажем, я хочу написать sqrt{x}

В начале сообщения я должен написать что-то вроде этого:

 ---
title: (sqrt x)
---
  

Но в содержании сообщения я должен написать:

 \(sqrt x\)
  

Если я сделаю \(sqrt x\) это в заголовке, внешний вид веб-страницы будет искажен.

Если я сделаю (sqrt x) это в содержимом сообщения, я получу отдельные брекеты с литералом внутри (sqrt x)

Почему? Может кто-нибудь объяснить, как обрабатываются строки в этих двух и почему они обрабатываются по-разному?

Ответ №1:

Текст в интерфейсе (метаданные) не анализируется как Markdown. Фактически, Jekyll удаляет frontmatter из документа перед передачей его в Kramdown. Kramdown даже не видит frontmatter. Поэтому ваш «заголовок» передается как есть, экранирование не требуется. Если это помогает, frontmatter не является частью Markdown. Это дополнение, специфичное для Jekyll.

Напротив, в тексте Markdown mathjax необходимо экранировать. Некоторые синтаксические конфликты mathjax с синтаксисом Markdown, поэтому синтаксическому анализатору необходимо сообщить, что является mathjax, а что нет. Это достигается путем окружения mathjax соответствующими разделителями. Затем анализатор Markdown удаляет escape-символы из содержимого, но в остальном оставляет содержимое неизменным.

Помните, что синтаксис mathjax фактически анализируется и преобразуется в правильно отформатированное уравнение с помощью JavaScript в браузере. HTML, сгенерированный Kramdown / Jekyll, по-прежнему содержит синтаксис mathjax без изменений. Но поскольку у нас есть два разных пути, есть два немного разных способа получить один и тот же результат.