<b>构建含有数学内容的动态网站 7 m G) F$ p; Q6 p/ q</b>JavaServer Pages 技术和 LaTeX 帮助的联机科学教育与研究 0 _% j" l; [, a( @0 a& v
3 H" V+ o' w' ^5 ?3 j! a3 }
<><a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml#author1" target="_blank" ><FONT color=#000000>Michael Juntao Yuan</FONT></A><A herf="mailtjuntao@astro.as.utexas.edu">juntao@astro.as.utexas.edu</A>)# q7 W( G! ?6 f! }7 ]4 Y
博士研究生,德州大学奥斯汀分校0 \ c& G1 M+ F& G6 a$ |
2002 年 2 月</P> ; S3 I# C' B0 } y& c- ~<BLOCKQUOTE>将含有下标、上标和特殊符号的数学公式转换成 HTML 非常困难。大多数科学家和数学家使用灵活的 LaTeX 文本处理器来创建外表美观的公式 — 但是如何将这个输出转换成 Web 友好的格式呢?在本文中,Michael Yuan 说明了如何使用 JSP 页面和定制标记将 LaTeX 格式的公式放到 Web 上,这种方法对于编写者来说很简便并且不需要任何特定的客户机端软件。正如他在各种日益有效的方法中反复说明的,您会发现服务器方 Java 技术如何利用不同的第三方工具来解决看似很难处理的问题。通过单击本文顶部或底部的<B>讨论</B>在<A>论坛</A>中将您对本文的想法与作者和其他读者一起分享。</BLOCKQUOTE>1 @( B, D. r% ?0 w; q
<>因特网和 Web 最初是由科学家设计用来交换科学和数学研究信息的。出乎意料的是,经过因特网 30 多年的发展以及 Web 10 年的发展,仍然没有一种简便的方法将数学密集型内容发布到 Web 上。已经开发了 Web 数学通信标准,例如 W3C 的 MathML 建议;但是为了使用它们,数学内容的作者和读者都需要特定软件,比如用于 Netscape Navigator 和 Internet Explorer 的 IBM techexplorer 数学浏览器插件。(请参阅<a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml#resources" target="_blank" ><FONT color=#000000>参考资料</FONT></A>以获取到 TechExplorer 和 MathML 的链接。)由于技术困难、成本和安全性危险因素,用户不太愿安装特定客户机端软件。因此,使那些标准的采用被限制在狭窄的研究领域,并且广大因特网用户无法使用它们。当前在 Web 上共享数学信息最方便的方法仍是将所有非文本公式转换成快照图像,然后将那些图像插入标准 HTML 页面。</P> 6 f" B/ I$ ^; w& k* s* H<>最新的基于 GUI 的数学权威性工具具有将文档保存为“Web 页面”的选项;这些工具为您生成公式图像和静态 HTML 页面。如果您只是想在 Web 上发布静态内容,例如论文,则这种方法是很方便的。但是,静态网站的时代已经早就过去了,因为在大多数网站中用户的参与已经变得不可缺少。高级数学网站应该从后台数据库中动态地发布内容并允许用户提交他们自己的内容以与其他用户分享(示例包括交互式考试系统和研究协作系统)。</P> ; g, D: w. J& B9 Z6 g+ |<>本文将向您展示该问题的一种解决方案。样本代码提供了一种方法,它可以快速简便地将表示数学公式的标记文本转换成显示该公式的可用于 Web 的图形文件。在此过程中,您会看到解决更多一般性难题的方法:我们将使用 JSP 页面和定制标记将几个完全不同的且互不相连的工具链接在单个程序中。当您使用多变的动态 Web 应用程序时,请记住不必从头做起;解决方案也可以其它形式提供,这由您控制。</P># q# l. H3 H. a; P
<><A>JSP 技术回顾</A>6 D' L- E, a5 l
实现动态服务器方应用程序的领先技术是 JavaServer Pages(JSP)技术。可以使用 JSP 页面来控制如何在前端 Web 页面(显示逻辑)上显示后台数据。JSP 页面使用类似 HTML 的标记语言将 Java 数据对象与 HTML 显示元素粘合在一起。</P>8 Z' O; N# ~+ O+ |3 ?, f9 i
<>JSP 技术的主要优点是可扩展性。可以使用定制标记来扩展 JSP 标记语言,它允许我们封装在标记处理器类内部处理显示逻辑的 Java 代码。Web 编写者可以直接使用预定义的标记库完成复杂的显示任务,而不需要编写任何 Java 代码。定制标记使重用显示控制码成为可能,并且极大地简化了 Web 页面编写者的工作。常用的 JSP 定制标记类型是<I>内容转换</I>标记,它将包含在标记主体内对编写者友好的内容转换成对访问者友好的显示元素。</P>+ _& R4 N3 ?+ @6 F4 Q! T6 j
<>对于数学网站,可以使用内容转换标记将数学语义表示转换成 Web 图像。我们将在接下来的几节中更详细地讨论这一技术。</P> . }: y6 v0 T. D. \; x# M }/ v$ [<><A>预备知识</A> 5 A8 B1 }7 M3 _% x/ _! Y这里说明了内容转换标记是如何工作的。当 JSP 容器遇到定制标记时,它在当前页的标记库描述符文件中查找标记名称。如果它找到一个匹配项,则 JSP 容器将上下文信息传递到标记处理器类。JSP 标记处理器首先从定制标记的主体中抽取表示数学公式的文本字符串。然后处理器根据语义文本公式创建图像,接着将该图像的 HTML 标记(<CODE><IMG></CODE>)发送到浏览器。在标记处理器中所需的数学图像生成工具应该具有下列功能部件:</P> : H" H- S% h. g9 \: K4 x8 Z<UL> ! {$ K1 n+ O- Y% I( b) [% J<LI>必须用纯文本表示数学公式,纯文本是 JSP 标记主体中唯一支持的格式。纯文本还是通过 HTTP 协议传送信息和在数据库或 XML 文档中存储信息的标准格式。9 s: s4 B- j8 g- Y1 I
' O& `! V6 e, ^! `$ k
6 ~& w6 m9 }5 H
0 m$ @: q3 _: | `; F4 G% W) t6 q5 J<LI>数学公式的纯文本表示法必须符合语义并且是直观的,这样 Web 编写者可以在无需经过许多训练的情况下使用它。为了实现该目的,如果全世界的科学家都已使用语义数学表示法体系,那么这是最好的。 * u" B, F6 U, }6 w) {3 z( P 2 e' C" a# `* f5 m j9 t; w C' {" m' D% w
, T- `9 J: R4 ?<LI>数学显示工具在许多平台上应该都可用来发挥 Java 应用程序的跨平台性能。</LI></UL> 2 V& C( V& I3 o7 i( c ~: D9 R<><A>LaTeX 简介</A>+ r2 }) v+ z. x% h4 R. }5 a5 W
符合以上所有要求的数学编写软件是一套业界标准的 TeX/LaTeX 类型设置工具(此后简称为 LaTeX)。LaTeX 提供下列功能:</P> % ]. J! D3 J) q. a<UL> 1 f( H4 G W7 b. e O$ U9 l/ ]: B<LI>LaTeX 使用标准文本输入文件和一种完全开放的格式。事实上,大多数 LaTeX 实现也是开放源码的。# |% T6 T8 c" `9 r4 I; n
/ t: j( ]) q9 ]6 J5 Z' o7 u! i6 P: ^
8 C) E( V4 a# x f7 p5 b0 }9 Z
<LI>由于 LaTeX 的语法非常直观,所以很容易学习。例如,下列输入文本 . b7 j9 U/ w# S ( x1 ]# r1 K. V4 }: j" e5 _# F6 [, [6 d, m6 ~& e8 t
+ p2 `' @, P- ?+ }/ L
<TABLE cellSpacing=0 cellPadding=5 width="80%" bgColor=#cccccc border=1> 0 e5 v3 S/ m8 i5 P3 V9 V1 a* H# s( C: I6 f! R
<TR> 4 k) z3 }" h8 f: v<TD><RE><CODE> \alpha_0^2 + \beta_0^2 = \gamma_0^2 </CODE></PRE></TD></TR></TABLE>+ S; A7 R0 [1 T1 L: s$ z5 k! F' y
) }1 k$ \ d% D X% X. C5 z# n0 W2 b
8 r7 _- C7 D7 o+ W" O$ z2 A
<>通过 LaTeX 处理后生成图 1 中显示的公式。 n% p' Z# N( c2 H' v
) Q' h z \9 J4 A
</P> % I. U8 |1 `4 A- j5 J<><A><B>图 1. 样本 LaTeX 输出</B></A><IMG src="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/fig01.gif"></P> & N! l# |) z- x" t! U& q, \- ^+ A7 A
8 g9 d l6 k: z4 J . ]0 X' @; p9 F; n. T<LI>LaTeX 已经建立了一个很好的用户库,因为它在科学界中成为一种标准的类型设置语言已有一段时间了。大多数数学作者都已经熟悉它了。$ P2 m* k W4 J# V
1 o1 m" E0 T4 Z1 y - r3 ^4 w$ g9 J5 ? ! M: Y, }4 `4 f2 u+ o% w! N: a8 C<LI>在很多平台上都可以使用 LaTeX 处理器,包括最常用的 UNIX、Linux、Windows 和 Mac OS。因此 LaTeX 文档有很高的可移植性。 ' ]; t+ i9 I* N. g4 t, E' @0 C. W% [/ N/ s/ s! ~" y: |, D- O( N' F* f
8 v5 A4 g9 `# k, e5 }
9 t5 c# |/ M/ S' Z
<LI>LaTeX 生成专业的具有出版质量的公式。这已经超出了 Web 图形的要求。图 2 显示使用 LaTeX 后呈现的麦克斯威尔方程组。 : \$ i( i9 S: i4 D" k! X9 P8 S3 y4 J" g) h; y+ m' d- N
* K, C8 E& ~1 ~# q+ k- s
u: h4 A' I' O& j9 V$ J
<><A><B>图 2. 使用 LaTeX 呈现的麦克斯威尔方程组</B></A><IMG src="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/fig02.gif"></P></LI></UL> + {0 B- p1 {1 K% M/ K/ F, P' D<>在继续阅读本文之前,如果对 LaTeX 及其语法感到陌生,最好熟悉一下。在下面的<a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml#resources" target="_blank" ><FONT color=#000000>参考资料</FONT></A>一节中包含了到有用信息的链接。</P> ' M |' `" g( A: H2 D8 n3 _ J& i<><A>从 LaTeX 中生成 GIF 图像</A> * _7 P8 V; Q6 c3 q6 D3 ?LaTeX 可以将语义数学公式处理成图像,但是无法将那些图像直接显示在大多数 Web 浏览器中。所有 Web 浏览器都支持 GIF 图像,因此我们需要将 LaTeX 公式图像转换成 GIF 格式。在本节中,我们将研究如何使用第三方工具从 LaTeX 输入文本中生成 GIF 图像。我们的最终目的是尽可能地使这个过程自动化,但是研究一下我们必须使用的基本构件块也是有所帮助的。我们将使用 Linux/UNIX 命令行工具作为示例,但是具有相同功能的工具也可以在 Windows 和 Mac OS 上使用。可以类似地生成其它格式的图像,例如,PNG 和 JPEG。下列步骤将创建 GIF 图像格式的数学内容:</P> 3 c5 p/ f) j. I2 c3 v4 k1 l) ?5 q8 }<OL>8 C0 S3 J3 c( N m+ ^! B t
<LI>遵循 LaTeX 语法在文本输入文件中创建数学内容(我们把样本文件称为 sample.tex)。( [& S Y( I; [6 o: @
5 x8 a# G7 X8 @$ t6 s
, [) R" k' v' p; D
<LI>使用图 3 中显示的 LaTeX 程序将 sample.tex 处理成与设备无关的文件(sample.dvi)。命令是 <CODE>latex sample.tex</CODE>。在该过程中,LaTeX 还生成一个日志文件和一个辅助文件。 : L+ A( m: [& F6 z7 R7 Q! Q 3 b" R d" W9 i2 b6 j6 ~7 Y- E% M J8 U; `
<><A><B>图 3. 运行 LaTeX</B></A><IMG src="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/fig03.gif"></P> $ @. M" J: ?) U! a3 g3 u! E5 G& \6 Q& M<LI>使用图 4 中显示的 Dvips 实用程序将 .dvi 文件转换成 PostScript 文件。命令是 <CODE>dvips -o sample.ps sample.dvi</CODE>。(有关 Dvips 的更多信息,请参阅<a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml#resources" target="_blank" ><FONT color=#000000>参考资料</FONT></A>。); d. u# P6 Y* `0 t
5 `. }, R% ]: q9 `& x* `3 KJavaServer Pages technology and LaTeX help online science education and research ) J* m. Q0 j- E3 v: f7 k
2 a/ x* `% ?# V& N# F nMichael Juntao Yuanjuntao@astro.as.utexas.edu) % O) d& K" k! f9 Y' P; u9 j博士研究生,德州大学奥斯汀分校 5 P6 E6 Z6 j2 d( t! ^7 a3 K+ Y2002 年 2 月 8 u4 w- } x, Q H8 w, ~0 { ( D3 w0 D, h% ^/ v! VMathematical formulae, with their subscripts, superscripts, and special symbols, are devilishly difficult to translate into HTML. Most scientists and mathematicians use the flexible LaTeX text processor to create aesthetically pleasing formulae -- but how can you convert this output to a Web-friendly form? In this article, Michael Yuan shows how JSP pages and custom tags can get LaTeX-formatted formulae onto the Web in a fashion that is easy for the author and doesn't require any special client-side software. As he iterates through increasingly efficient methods, you'll see how server-side Java technology can harness the power of disparate third-party tools to solve seemingly intractable problems. Share your thoughts on this article with the author and other readers in the discussion forum by clicking Discuss at the top or bottom of the article. - W. X, n1 {6 I7 ]The Internet and the Web were originally designed by scientists to exchange scientific and mathematical research information. Ironically, after more than 30 years of Internet and 10 years of Web development, there is still no easy way to publish mathematics-intensive content on the Web. Web mathematical communication standards, such as the W3C's MathML recommendation, have been developed; but to use them, both the author and the reader of mathematical content need special software, like the techexplorer mathematical browser plug-in from IBM for Netscape Navigator and Internet Explorer. (See Resources for links to TechExplorer and MathML.) Users are reluctant to install special client-side software because of the technical difficulties, costs, and security risks involved. Thus, the adoption of those standards is limited to small research cycles, and the vast majority of Internet users cannot use them. Today, the most convenient way to share mathematical information on the Web is still to convert all nontext formulae into snapshot images and then insert those images into standard HTML pages. : @: j/ h: R2 E# b4 M
5 G. ^1 \8 L, T1 lMost modern GUI-based mathematical authorizing tools have options to save documents as "Web pages"; these tools generate formulae images and static HTML pages for you. This is convenient if you just want to publish static content, such as your thesis, on the Web. But the days for static Web sites are long gone as user participation has become integral in most sites. Advanced mathematical Web sites should publish content dynamically from back-end databases and allow users to submit their own content to share with other users (examples include interactive exam systems and research collaboration systems). 4 F# I- @/ Z. ]+ ?! E
' q% g+ {6 P8 T7 b# j% _7 WThis article will show you one solution to the problem. The sample code provides a means by which marked-up text representing a mathematical formula can quickly and easily be transformed into a Web-ready graphic file displaying that formula. Along the way, you'll see one approach to a more general conundrum: we'll use JSP pages and custom tags to link several disparate and unconnected tools into a single program. When you're working on tricky dynamic Web applications, remember that you don't have to start from scratch; the solution may be available in a different form, waiting for you to harness it. & j9 M9 ~8 C! ?# j7 f
, U7 g5 S2 m: ]1 [8 z' s5 |! `% n2 t8 I9 f8 a+ T
1 u0 u9 Y6 L# K4 P V) I- Z, s
将含有下标、上标和特殊符号的数学公式转换成 HTML 非常困难。大多数科学家和数学家使用灵活的 LaTeX 文本处理器来创建外表美观的公式 — 但是如何将这个输出转换成 Web 友好的格式呢?在本文中,Michael Yuan 说明了如何使用 JSP 页面和定制标记将 LaTeX 格式的公式放到 Web 上,这种方法对于编写者来说很简便并且不需要任何特定的客户机端软件。正如他在各种日益有效的方法中反复说明的,您会发现服务器方 Java 技术如何利用不同的第三方工具来解决看似很难处理的问题。通过单击本文顶部或底部的讨论在论坛中将您对本文的想法与作者和其他读者一起分享。 3 K9 A! C, @( r4 y因特网和 Web 最初是由科学家设计用来交换科学和数学研究信息的。出乎意料的是,经过因特网 30 多年的发展以及 Web 10 年的发展,仍然没有一种简便的方法将数学密集型内容发布到 Web 上。已经开发了 Web 数学通信标准,例如 W3C 的 MathML 建议;但是为了使用它们,数学内容的作者和读者都需要特定软件,比如用于 Netscape Navigator 和 Internet Explorer 的 IBM techexplorer 数学浏览器插件。(请参阅参考资料以获取到 TechExplorer 和 MathML 的链接。)由于技术困难、成本和安全性危险因素,用户不太愿安装特定客户机端软件。因此,使那些标准的采用被限制在狭窄的研究领域,并且广大因特网用户无法使用它们。当前在 Web 上共享数学信息最方便的方法仍是将所有非文本公式转换成快照图像,然后将那些图像插入标准 HTML 页面。 7 G/ y s' V- \1 ^2 [
( j. C- M' w) }4 V; s2 V% g) i最新的基于 GUI 的数学权威性工具具有将文档保存为“Web 页面”的选项;这些工具为您生成公式图像和静态 HTML 页面。如果您只是想在 Web 上发布静态内容,例如论文,则这种方法是很方便的。但是,静态网站的时代已经早就过去了,因为在大多数网站中用户的参与已经变得不可缺少。高级数学网站应该从后台数据库中动态地发布内容并允许用户提交他们自己的内容以与其他用户分享(示例包括交互式考试系统和研究协作系统)。 , V2 i+ V8 V* k7 Q+ u / j7 J! x: ~: \ O本文将向您展示该问题的一种解决方案。样本代码提供了一种方法,它可以快速简便地将表示数学公式的标记文本转换成显示该公式的可用于 Web 的图形文件。在此过程中,您会看到解决更多一般性难题的方法:我们将使用 JSP 页面和定制标记将几个完全不同的且互不相连的工具链接在单个程序中。当您使用多变的动态 Web 应用程序时,请记住不必从头做起;解决方案也可以其它形式提供,这由您控制。 1 D7 D6 O) |: R9 F# m : c1 S* u2 W& B k中文:<a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml" target="_blank" ><FONT color=#000000>http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index.shtml </FONT></A>; ?. H6 E( Q. c) ~
; i% Y. f9 k8 N, a原文:<a href="http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index_eng.shtml" target="_blank" ><FONT color=#000000>http://www-900.ibm.com/developerWorks/cn/java/j-jspmath/index_eng.shtml </FONT></A>