我有一个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一起使用?
答案 0 :(得分:47)
当然你可以和Jekyll一起使用mathjax。为了实现这一点,请确保
<div>
元素中的显示数学和<span>
元素中的内联数学放入,大多数降价解释器将单独留下。 javascript行是否在html源中正确显示?我发现指向mathjax CDN更容易,更快,而不是提供我自己的副本。尝试使用
行 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
(这些配置选项允许您使用更多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
的支持。
在默认布局中的</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>
在_config.yml
行后markdown: kramdown
将此设置为true。
mathjax: true
完成。重新插入Mathjax
\( ... \)
,阻止,使用\[ ... \]
。
唯一需要注意的是使用markdown时反斜杠的转义,因此分别为内联和块数学的分隔符变为\\( ... \\)
和\\[ ... \\]
。
以下是MathJax内联呈现\\( 1/x^{2} \\)
的示例,这是一个块呈现:
\\[ \frac{1}{n^{2}} \\]
。
我在我的博客上使用它。
答案 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
cd ~
mkdir -p git/hub && cd git/hub
git clone --depth 1 https://github.com/mathjax/MathJax.git
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/
git
跟踪cd git/lan/project-name/
git add assets/JS_3rd_Party/MathJax
git commit -m 'Added MathJax.js unpacked source to git tracking'
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)将使用上述Liquidlatest.js
...if
... {{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
内多余的换行符没有错误,而在那里渲染输出仍然存在问题。
<span>
跟踪中span
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
步骤latest.js
为第三方JavaScript创建目录路径,然后在其中复制Option 0
1.
MathJax/unpacked/latest.js
请参见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
将这三个文件添加到Option 0
跟踪
5.
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等。
答案 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
---