将MathJax与Jekyll一起使用

时间:2012-06-11 21:46:36

标签: jekyll mathjax

我有一个Jekyll博客,我想用它来使用MathJax,因为我希望能够键入类似

的内容
$$\sum_{n=1}^\infty 1/n^2 = \frac{\pi^2}{6}$$

在我的markdown文件中,并使用MathJax生成正确的LaTeX表达式,其方式与在math.stackexchange处完成的方式类似。

最简单的方法是什么?目前我的目录中有jsmath.js(GitHub gist)文件,我想我的mathjs目录中可以有一个名为_includes的简单文件

<script src="path/to/jsmath.js></script>

并通过

在每个帖子中包含该内容
{% include mathjs %}

但这似乎不起作用 - 当我运行jekyll --server时,会生成页面,但没有任何内容可见。

我是以正确的方式来做这件事的吗?有没有更好的方法将MathJax与Jekyll一起使用?

8 个答案:

答案 0 :(得分:47)

当然你可以和Jekyll一起使用mathjax。为了实现这一点,请确保

  1. 如果你在降价时写下你的帖子,那么你的降价解释器并没有打击你的mathjax输入。我发现保护它的最佳方法是始终将<div>元素中的显示数学和<span>元素中的内联数学放入,大多数降价解释器将单独留下。
  2. javascript行是否在html源中正确显示?我发现指向mathjax CDN更容易,更快,而不是提供我自己的副本。尝试使用

    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

  3. (这些配置选项允许您使用更多tex符号来启动数学环境,例如\begin{equation}等。)

    您的jsmath.js脚本可能存在一些问题; CDN版本将更快,可能更可靠。 (我在每个页面上都有我的页脚中的javascript加载,但当然如果你不想在不需要的时候加载javascript,那么你的include策略是有意义的。)

    如果您向我们提供指向您博客的链接,我们可以提供更多帮助吗?您可以看到一些示例on my blog(如果有帮助的话,还可以链接到github上的Jekyll设置)。

答案 1 :(得分:47)

如果您对发布过程有足够的控制权(例如,您自己正在运行Jekyll),easy solution就是将降价解析器切换为支持TeX的解析器。例如,使用kramdown

gem install kramdown

markdown中的_config.yml行更改为

markdown: kramdown

并添加类似

的内容
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

_layouts/default.html。现在你可以简单地mark any mathematics in your posts with $$

答案 2 :(得分:6)

如果您使用kramdown作为降价口味,那很简单。 Kramdown内置了对mathjax的支持。

  1. 在默认布局中的</head>标记之前添加此内容。

    <script type="text/javascript" async 
    src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?
    config=TeX-AMS-MML_HTMLorMML"></script>
    
  2. _config.yml行后markdown: kramdown将此设置为true。

    mathjax: true
    
  3. 完成。重新插入Mathjax

    • 内联,使用\( ... \)
    • 阻止,使用\[ ... \]

      唯一需要注意的是使用markdown时反斜杠的转义,因此分别为内联和块数学的分隔符变为\\( ... \\)\\[ ... \\]

  4. 以下是MathJax内联呈现\\( 1/x^{2} \\)示例,这是一个块呈现: \\[ \frac{1}{n^{2}} \\]

  5. 我在我的博客上使用它。

答案 3 :(得分:5)

我写了一篇关于设置MathJax的博客文章:Latex Math Magic

从本质上讲,你必须使用MathJax停止Markdown 搞乱

我最终使用了代码块,这对我来说很好。所以要么在写东西之前使用至少4个空格,要么使用锐符号:`; 不幸的是,MathJax默认跳过<code>标签,因为它不想转换它不应该转换的代码。

因此,在您的主布局文件中,您必须添加一些JavaScript代码:

MathJax.Hub.Config({
  tex2jax: {
    skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
  }
});

此外,我们必须告诉MathJax忽略非乳胶代码块或普通代码块:

MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i=0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';
    }
});

在他看来,我们所有的乳胶代码块都会在其类名中包含has-jax字符串。因此,我们可以在我们的css表中应用一些简单的样式来赋予它我们自己的样式。

code.has-jax {font: inherit; font-size: 100%; background: inherit; border: inherit;}

可能不是最好的方法,但过去几年它对我的博客有用,我从来没有遇到任何进一步的问题。

答案 4 :(得分:2)

您可以尝试我的静态博客生成器:Jekyde。 Jekyde与Jekyll类似,但它很好地处理了Markdown文件中的LaTeX。您只需要将公式放在$ ... $和$$ ... $$中。此外,Jekyde在浏览器中包含一个带有LaTeX预览的降价编辑器。

答案 5 :(得分:0)

尝试以下任一选项之前的一些注意事项

即使使用0,选项--incremental也会增加构建时间,实际上,选项1应该在 most 实例中使用,但是,这与其他如果您将网络部署在可能无法访问CDN的客户端上,那么占用的空间可能值得付出代价。

这两个选项均已在专用服务器上进行了测试,并使用kramdown作为降价解释器,并且在项目的mathjax: true文件中设置了_config.yml;有关这些位的操作方法,请参见Step 2 of Soham Bhattacharyya的答案及其序言,以及Caramdir的前两个代码块。

选项0下载并解压缩后的源代码复制到project-name

  1. 下载源代码
cd ~
mkdir -p git/hub && cd git/hub
git clone --depth 1 https://github.com/mathjax/MathJax.git
  1. 在项目的目录中创建目录路径,并将文件从MathJax/unpacked复制到该路径
cd ~
mkdir -p git/lan/project-name/assets/JS_3rd_Party/MathJax
cp -r git/hub/MathJax/unpacked/* git/lan/project-name/assets/JS_3rd_Party/MathJax/
  1. 将源添加到git跟踪
cd git/lan/project-name/
git add assets/JS_3rd_Party/MathJax
git commit -m 'Added MathJax.js unpacked source to git tracking'
  1. 写一个包含文件
tee ./_includes/MathJax.html 1>/dev/null <<EOF
{%- if jekyll.environment == 'production' and site.mathjax == true -%}
  <script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/latest.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script>
{%- elsif jekyll.environment != 'production' and site.mathjax == true -%}
  <script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/MathJax.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script>
{%- endif -%}
EOF
  

私有服务器版本将使用MathJax.js,其中生产环境(GitHub)将使用上述Liquid latest.js ... if ... {{1 }}声明。

  1. 写一篇帖子进行测试
elsif
  

我没有endif就没有尝试过,因为cboettig的建议似乎完全可以解决问题。   此外,tee ./_posts/$(date +'%Y-%d-%m')-math-tests.markdown 1>/dev/null <<EOF --- layout: post title: "Math Tests" date: $(date +'%Y-%d-%m %H:%M:%S %z') categories: math --- {%- include MathJax.html -%} <span> for $x,y,z \in \{1, 2,\dots 9\}$ </span> <span> $$ \sum_{i=1}^n X_n $$ </span> EOF 内多余的换行符没有错误,而在那里渲染输出仍然存在问题。

  1. 将这些最新文件添加到<span>跟踪中
span
  1. 本地构建,或在远程服务器上推送并构建
git

选项git add _posts/$(date +'%Y-%d-')math-tests.markdown git add _includes/MathJax.html 仅复制bundle exec jekyll build --destination /tmp/www/project-name --config _config.yml --incremental 即可使用CDN(内容分发网络)

  1. 请参阅1步骤latest.js

  2. 为第三方JavaScript创建目录路径,然后在其中复制Option 0

1.
  1. 写一个包含文件
MathJax/unpacked/latest.js
  1. 请参见cd ~ mkdir -p git/lan/project-name/assets/JS_3rd_Party/MathJax cp git/hub/MathJax/unpacked/latest.js git/lan/project-name/assets/JS_3rd_Party/MathJax/ 步骤cd git/lan/project-name tee ./_includes/MathJax.html 1>/dev/null <<EOF <script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/latest.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script> EOF

  2. 将这三个文件添加到Option 0跟踪

5.
  1. 有关在本地构建的信息,请参见git步骤git add _includes/MathJax.html git add _posts/$(date +'%Y-%d-')math-tests.markdown git add assets/JS_3rd_Party/MathJax git commit -m 'Added `MathJax.html`, `latest.js`, and a test post to git tracking'

对于任一选项

如果部署在私有服务器上,则可能还需要在项目的Option 0文件中定义7.,尤其是模拟GitHub在私有服务器上使用的baseurl URL方案时。 / p>

如果同时部署到私有服务器和GitHub,最好使用单独的配置文件,并在构建问题_config.yml时使用,例如...

username.tld/project-name

希望通过包含项来加载资产。

答案 6 :(得分:0)

Jekyll使用kramdown作为2.0+起的默认降价转换器。而且它不支持mathjax等,我认为以下内容可以为您提供帮助。

  

jekyll-space-Je一个Jekyll插件,可为   桌子,mathjax,plantuml等。

     

https://github.com/jeffreytse/jekyll-spaceship

答案 7 :(得分:0)

对我来说,将此添加到我的默认 _layout 或 head _include 作品中(与前端问题 _page 或 _post 变量相结合):

System
USER_ERROR
24/3/2021
11:08 AM
-System-
The following operation or use case is not yet supported in SuiteScript: API getSessionRecordObject() on nlobjContext, script ID:(blurred just in case) bundles:[] 
---
mathjax: yes
---

working example