WordPress 数学公式插件 LaTeX 中推荐了 Zhiqiang 同学的 WordPress 插件 LaTeX for WordPress,这个插件可以方便地以 MathJax 或者图片方式展示文章中的 LaTeX 公式,效果美观,使用方便。

不过由于使用习惯不同,我在使用这个插件的过程中也遇到了一些问题,于是对这个插件做了一点小小的修改,记录在此。

这次修改主要要解决两个问题:

  1. 在启用 MathJax 的情况下,修复 $$...!$$ 无法显示公式源码的问题。
  2. 限制公式的修饰符为 [latex][/latex]

根据 LaTeX for WordPress 主页上的说明,如果不想对公式进行渲染,只显示公式的源码,需要在第二个 $$ 前面加 !。但在实际使用中发现开启了 MathJax 的时候无法实现这一效果。仔细看了一下 MathJax 的文档,原来虽然插件把 $$a^2+b^2+c^2!$$ 这样的代码转换成了 \(a^2+b^2+c^2!\),但后者又被 MathJax 的 JavaScript 给渲染成 \(a^2+b^2+c^2\) 了。而要解决这个问题也很简单,只要给页面的 body 标签添加一个 tex2jax_ignore 的 class,就可以阻止 MathJax 的处理(参见 The tex2jax Preprocessor)。

以我现在使用的 LightWord 主题为例,修改 wp-content/themes/lightword/header.php,把 <body <?php body_class(); ?>> 改成 <body <?php body_class('tex2jax_ignore'); ?>> 即可。

至于公式的修饰符,插件支持 \(...\)\[...\]$$...$$[latex]...[/latex][tex]...[/tex],但我还是担心这样的代码在一些程序源代码中也很容易出现(比如正则表达式),所以还是决定只用 latex 作为标记。这个修改很简单,只要对 /wp-content/plugins/latex/latex.php (v3.1)做如下改动即可:

108c108,109
< $regex = '#\$\$(.*?)\$\$#si';
---
> // $regex = '#\$\$(.*?)\$\$#si';
> $regex = '#\[latex\](.*?)\[/latex\]#si';
110c111
< $toParse = str_replace(array("\(", "\)", "\[", "\]", "[latex]", "[tex]", "[/latex]", "[/tex]"), array("$$", " $$", "$$!", " $$", "$$", " $$", "$$", " $$"), $toParse);
---
> // $toParse = str_replace(array("\(", "\)", "\[", "\]", "[latex]", "[/latex]", "[tex]", "[/tex]"), array("$$", " $$", "$$!", " $$", "$$", " $$", "$$", " $$"), $toParse);

这样修改之后,依旧支持插件原本的 inline、single line 以及显示源码的处理。要在单独的一行中显示公式,就在 [latex] 后面加 !;如果要显示公式源码,就在 [/latex] 前面加 !

当然也期待 Zhiqiang 进一步完善插件,给用户提供更方便的设置选项。

Like this post? Share on: TwitterFacebookEmail

Comments

So what do you think? Did I miss something? Is any part unclear? Leave your comments below.

comments powered by Disqus

Keep Reading


Published

Last Updated

Category

建站

Tags

Stay in Touch