2022年5月21日更新
有个好消息,从1.38开始,Math扩展也内置了,应该是跟可视化编辑器一样,开箱即用了。
2022年1月27日原文
在《为MediaWiki安装Math扩展失败》中我已经详细介绍了安装失败的经历,没想到老天眷顾,最终还是成功了,所以决定另开一贴记录。
在之前的过程中,我所有的工作重点都是放在了Mathoid和Reatbase服务上,两者以及nginx的衔接和配置把整个人都弄崩溃了,一度都打算升级MediaWiki的大版本进行尝试。
其实Math的官方文档中提供了另外一种调用Mathoid的方法,就是通过本地接口。之所以之前执着于使用服务,是因为它有一个内存限制,官方给出的是1.2g,可怜我那小服务器只有区区1g内存,一运行就提示内存不足(也有可能是配置问题)。
前两天终于将服务器的内存升级到2g,于是决定尝试采用本地接口的方式。
打开LocalSettings.php文件,在其中加入
wfLoadExtension( 'Math' );
// Set MathML as default rendering option
$wgMathValidModes[] = 'mathml';
$wgDefaultUserOptions['math'] = 'mathml';
// Please create a config.yaml in advance. Templates are in the Mathoid repository.
$wgMathoidCli = ['/etc/mathoid/cli.js', '-c', '/etc/mathoid/config.yaml'];
// Raise MediaWiki's memory limit to 1.2G for mathoid.
$wgMaxShellMemory = 1228800;
打开之前建立的页面(使用),发现报错,核心内容如下:
node:internal/fs/utils:670
throw new ERR_INVALID_ARG_TYPE(propName, ['string', 'Buffer', 'URL'], path);
按错误内容搜索,有用信息不多,其中有提到用node重建(修改源码这种就直接跳过了)。
我服务器中的nodejs版本有点混乱,其中一个是通过yum安装的,版本为15.x,Mathoid服务使用的是12.x(在服务配置中硬编码配置),至于当时是用哪个npm版本安装的Mathoid现在已经记不清了。替换几个版本之后无果,决定删掉原来的Mathoid文件夹重新安装一遍。
官方文档的步骤如下:
# 安装必须的依赖
sudo yum install -y epel-release
sudo yum install -y nodejs npm mocha librsvg2-devel pkgconfig git
sudo yum groupinstall -y 'Development Tools'
# 将Mathoid装入/etc目录或其他地方
cd /etc
sudo git clone https://github.com/wikimedia/mathoid
cd mathoid
# 使用npm安装和测试
sudo npm install
npm test
# 运行服务
node server.js
注意:
- 因为nodejs的版本问题,所以yum部分我省略了nodejs和npm以及mocha(如果使用yum安装的话会自动安装nodejs)而改用nvm管理和安装。
- 如果无法克隆的话,可以把网址中的https替换成git。
运行npm install时报了一大堆的警告和错误,没细看,尝试刷新测试页面,依然报错,提示找不到node。
尝试将nvm的nodejs软链接到/usr/bin/node。
unlink /usr/bin/node
ln -s /usr/local/nvm/versions/node/v12.22.1/bin/node /usr/bin/node
刷新页面,还是报内存不足。尝试将nodejs版本降到10.x版(官方文章建议,权且信之),清除npm缓存,删除node模块目录,重新安装。config.yaml
不做修改,保持默认。
再次刷新页面,竟然成功了。
生成速度有点慢,但是一旦生成后,渲染速度比起SimpleMathJax快了不是一丁半点(后者每次都要调用代码实时生成,而前者是在编辑过程中生成)。
参考资料:
https://www.mediawiki.org/wiki/Manual:Mathoid
https://github.com/wikimedia/mathoid
2 条评论
看了一下math扩展的词条,现在是可以直接启用native模式通过 PHP 从 LaTeX 生成 MathML,应该是新更新的,只要在配置文件里加上下面两个即可:
$wgDefaultUserOptions['math'] = 'native';
$wgMathValidModes = ['source', 'mathml', 'native'];
看了一下math扩展的词条,现在是可以直接启用native模式通过 PHP 从 LaTeX 生成 MathML,应该是新更新的,只要在配置文件里加上下面两个即可:
$wgDefaultUserOptions['math'] = 'native';
$wgMathValidModes = ['source', 'mathml', 'native'];
看了一下math扩展的词条,现在是可以直接启用native模式通过 PHP 从 LaTeX 生成 MathML,应该是新更新的,只要在配置文件里加上下面两个即可:
$wgDefaultUserOptions['math'] = 'native';
$wgMathValidModes = ['source', 'mathml', 'native'];