在网页中渲染数学公式

如果是博客、论坛或维基的开发者,并且致力于在每次新版本发布时都能让用户感到惊喜,那么可能不需要为这个功能找理由。本文将向展示如何让用户输入数学公式,并以几乎不需要编写任何代码的方式,以漂亮的教科书格式呈现。

基本思路

基本思路是让用户输入类似于以下内容:

<img src=".? $ x^2 = 25 $ ">

上述请求首先会发送到default.aspx文件,其中一行代码会检测是否为图像请求,并将其转发给处理器。处理器使用MimeTeX生成公式的GIF文件并返回给浏览器。幸运的是,不需要关心这些,因为所有这些都已打包好,可以拖放使用。

应用场景

如果负责以下类型的应用程序,应该为用户提供这种能力:

  • 博客
  • 论坛
  • 维基
  • 电子邮件应用
  • 即时通讯
  • HTML编辑器
  • 文字处理

本质上,任何最终以图形形式呈现用户内容的应用程序都可以添加此功能。它不一定是HTML内容。例如,笔记软件可以在编辑期间检测到TeX内容,并将其替换为漂亮的图形形式。它可以使用本文提供的完全相同的库来实现此目的。

提示

如何在没有任何编码甚至没有自己的服务器的情况下显示公式?如果不想部署和维护本文中的代码,可以免费使用服务器。还可以在任何不支持TeX和数学公式的博客、维基或网站上使用它。要使用服务器,请在想要的公式后面附加http://shitalshah.com。这里有一个例子:

<img src="http://www.shitalshah.com? $ x^2 = 25 $ ">

试试看!

MimeTeX是这段代码的核心。MimeTeX由John Forkosh编写,主要用于在UNIX下运行,以及作为Windows下的CGI EXE。显然,虽然这可行,但它有很多缺点,比如必须能够在IIS上运行CGI EXE,这对于共享IIS托管来说是一个困难的特性。即使有专用服务器,CGI EXE解决方案也不会扩展,如果想支持成千上万的用户。此外,用户需要将mimetex.exe添加到图像标签的源中,这对于博客或论坛等应用程序的用户来说不太直观。

代码使用

可以通过以下三种方式使用此代码:

  1. 与自己的Web应用程序集成
  2. 作为单独的Web应用程序使用
  3. 在桌面应用程序中使用

下载代码,将名为OnlyRequiredFiles的文件夹(对于VB.NET,请查看VB.NET Version文件夹)中的文件添加到ASP.NET项目中,并将MimeTex.DLL放入bin文件夹。编辑default.aspx页面,在Page_Load或Page_Init中添加以下代码:

C# Astrila.Eq2Img.ShowEq.HandleEquationQueries();

重新编译!确保CachedEqImages文件夹存在,并且ASP.NET用户有写入权限。就是这样!现在可以在虚拟根文件夹中创建一个HTML文件,其中包含与本文开头所示相同的示例图像标签进行测试。

将Eq2Img文件夹复制到wwwroot。创建一个虚拟文件夹,确保CachedEqImages文件夹存在,并且ASP.NET用户有写入权限,并且default.aspx配置为默认页面。现在应该可以运行了!请记住,用户需要在图像标签中引用这个虚拟文件夹,如下所示:

<img src="/KB/dotnet/Eq2Img/ $ x^2 = 25 $ ">

这相当简单。只需要DLLImport MimeTex.DLL,并从Windows Forms应用程序中调用CreateGifForEq函数,如下所示:

C# [System.Runtime.InteropServices.DllImport("MimeTex.dll")] internal static extern int CreateGifFromEq(string expr, string fileName);

可以在Eq2ImgWinForms文件夹中查看示例Windows Forms应用程序,它看起来像这样:

公式格式

可能会注意到MimeTeX不仅仅支持符合TeX格式的公式。例如,还可以使用LaTeX命令创建复杂的图形,如下所示:

这是一个非常酷的功能,因为它允许用户仅使用MimeTeX就可以创作科学内容。更多示例在John的网站。

管理功能

还添加了一些管理功能,让可以删除缓存文件(这些文件非常小,通常是1KB的JPG文件)。可以使用Eq2ImgAdmin.aspx访问此功能。这个页面还允许动态卸载MimeTeX DLL。请记住,这是一个纯Win32 DLL,所以一旦它被ASP.NET进程加载,就会被锁定,不像托管的.NET DLL。这意味着不能在不重启IIS的情况下更新DLL,这对于共享托管或其他地方来说是一个不幸的情况。为了解决这个问题,管理页面允许根据需要动态卸载进程中的这个非托管DLL。对于技术上好奇的人来说,只是使用了GetModuleHandle和FreeLibrary Windows API调用。默认情况下,管理功能是未启用的。按照它显示的消息启用它。还要注意,可以完全排除这个页面,而不会失去核心功能。

安全披露

可能已经注意到,当调用MimeTeX DLL时,正在从ASP.NET运行非托管代码。这意味着ASP.NET应该有足够权限(默认情况下它有)。然而,更大的关注是可能的糟糕的C错误,如内存泄漏和无效指针,可能会使网站不稳定。在测试中,它运行得令人满意;进程内模式非常可扩展,MimeTeX自2002年以来已经在许多网站上使用。然而,如果发现问题,确实有一个退出策略,即在web.config文件中设置一个选项,以便MimeTeX可以进程外运行,甚至完全禁用它,只提供缓存的文件。由于MimeTeX是一个开源项目,任何人都可以在发现错误后立即修复。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485