在phpBB3中渲染latex公式的方法

phpBB 3.3.X 相关的使用、安装等话题,包括升级
版面规则
《发帖时,请复制下列格式文本,提供完整的信息,勿简略发布》


###### 以下为“基本的提问格式” ######
  • 主机操作系统: Windows (XP, 7, 8, 10)、Linux(Redhat,Centos, Mandrake等等)、或者其他的(请务必注明版本)
  • 快速架站程序: AppServ、XAMPP 等等(请务必注明版本号)
  • 您的上网方式:ADSL、Cable、FTTB等等 (请务必留下 ISP 名称或 ISP 官网)
  • 您安装的程序: Apache + php + MySQL 或者其他的组合 (请务必留下版本号,如果使用上面的快速架站程序就不必写了)
  • 您的 phpBB 版本: phpBB 3.3.0
  • 您的域名: 比如 phpbbchinese.com
  • 您的 phpBB 网址: 比如 https://www.phpbbchinese.com/
###### 以上为“基本的提问格式” ######

  • 安装扩展: 请注明安装扩展的名称,版本以及参考链接(非扩展问题免填)
  • 安装风格: 请注明安装的风格名称,版本以及参考链接(非风格问题免填)
  • 错误代码: 请使用 Code 标签将错误代码标识出来,如下:

代码: 全选

错误代码
  • 错误状态:如果没有错误代码,请直接贴出截图,或者是详细叙述错误状态内容。
备注:
如果需要,请提供测试用的账号与密码
若是管理账号,请使用短信联系站长
回复
寂默心流
注册用户
注册用户
帖子: 39
注册时间: 2021年1月21日 13:31

在phpBB3中渲染latex公式的方法

帖子 寂默心流 »

  三年前,我用的是mathtex.cgi渲染LaTex公式,但这办法失效了,直接报nginx 502错误,后台看是那个方法在html5的标准下属于怪异模式(quirks mode),nginx服务器不和你玩儿了。想想也正常,十几年前的老古董了,跟不上时代是必然的。何况cgi这技术路径,看着就不安全。

  另辟蹊径吧,可最早探讨phpBB论坛上渲染LaTex公式的帖子是2007年的事。我也不知道是phpBB的用户很陋,从来不贴公式,抑或是水平很高,无师自通,不用求教和讨论。

  我搜索半天,挺痛苦的,就是高人们总是不给你完整的实现过程,都是拣最精要的地方用只言片语秀一下就打住,可能非如此无以显其高吧。总的来说,IT领域对我这样的非专业人士来说很不友好,民科不好混啊。

  最后我找到了“MathJax的基本使用 - 启明星工作室 - 博客园”这篇文章,总算把问题攒起来了,终于取得了突破,基本搞定了这个问题。现录出如下:

  在overall_header.html的head段里加上一下来自katex官网文档的代码:

代码: 全选

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-wcIxkf4k558AjM3Yz3BBFQUbk/zgIYC2R0QpeeYb+TwlBVMrlgLqwRjRtGZiK7ww" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" integrity="sha384-hIoBPJpTUs74ddyc4bFZSM1TVlQDA60VBbJS0oA934VSz82sBx1X7kSx2ATBDIyd" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous"></script>
<script>
    document.addEventListener("DOMContentLoaded", function() {
        renderMathInElement(document.body, {
          // customised options
          // • auto-render specific keys, e.g.:
          delimiters: [
              {left: '$$', right: '$$', display: true},
              {left: '$', right: '$', display: false},
              {left: '\\(', right: '\\)', display: false},
              {left: '\\[', right: '\\]', display: true}
          ],
          // • rendering keys, e.g.:
          throwOnError : false
        });
    });
</script>
其中,katex.min.js,auto-render.min.js和katex.min.css可以用wget从上面各自的链接中下载后,放在网站根目录中,用.\auto-render.min.js这样的方式引用。

  没必要用BBcode标签了,直接单\$分割符渲染行内公式,左对齐;双\$分隔符渲染行间公式,另起一行,居中。
  
  另外,还可以用MathJax实现公式渲染,但渲染速度要慢一些,而且js和css文件没法下载到本地引用。其overall_header.html的加入代码如下:

代码: 全选

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
      processEscapes: true
    },
    "HTML-CSS": { fonts: ["TeX"] }
  });
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_HTML">
</script>
  也是不用标签了,同上用单或双\$符号框住渲染即可。效果如下:
屏幕截图 2024-04-20 062235.png
屏幕截图 2024-04-20 062235.png (8.89 KiB) 查看 28 次
上次由 寂默心流 在 2024年4月20日 07:13,总共编辑 6 次。
老互联网遗民,草堂堂主(laochengzi.cn)
头像
davidyin
网站管理员
网站管理员
帖子: 1440
注册时间: 2015年11月19日 01:50
联系:

Re: 用mathjax在phpBB3中渲染latex公式

帖子 davidyin »

:ugreat:
居住在西八区,有时差,提问请按照“通用提问格式”提问,未必能及时回复,见谅。
提供 phpBB 服务
寂默心流
注册用户
注册用户
帖子: 39
注册时间: 2021年1月21日 13:31

Re: 在phpBB3中渲染latex公式的方法

帖子 寂默心流 »

这些脚本不要放在overall_header.html里,因为里面的js和css文件调入很慢的,影响浏览速度。可以放在viewtopic_body.html尾部,这样只在打开具体帖子的时候才调用katex脚本,这样就更合理。
老互联网遗民,草堂堂主(laochengzi.cn)
回复