自定义LaTex处理过程

我们也可以控制将TeX的哪个变体用于系统范围的调用,从而也影响输出的格式。

latex.engine()命令可用于控制是否将系统安装的Latex,pdflatex或xelatex用于更复杂的LaTeX表达式。当从Sage命令行调用view()并将引擎设置为Latex时,将生成一个dvi文件,Sage将使用dvi查看器(如xdvi)显示结果。而在引擎设置为pdflatex的情况下,在Sage命令行中使用view()会生成PDF作为结果,Sage会调用系统的实用程序来显示PDF文件(acrobat,okular,evince等)。

在notebook中,有必要干预是否使用MathJax来渲染TeX片段,或者是否使用系统安装的TeX来代替LaTex完成更复杂的工作。可以通过一个标识列表,如果在一段LaTeX代码中发现了任何标识,则表示notebook将绕过MathJax来调用Latex(或由latex.engine()命令设置的任何可执行文件)。该列表由latex.add_to_mathjax_avoid_listlatex.mathjax_avoid_list命令管理。

  1. sage: latex.mathjax_avoid_list([]) # not tested
  2. sage: latex.mathjax_avoid_list() # not tested
  3. []
  4. sage: latex.mathjax_avoid_list(['foo', 'bar']) # not tested
  5. sage: latex.mathjax_avoid_list() # not tested
  6. ['foo', 'bar']
  7. sage: latex.add_to_mathjax_avoid_list('tikzpicture') # not tested
  8. sage: latex.mathjax_avoid_list() # not tested
  9. ['foo', 'bar', 'tikzpicture']
  10. sage: latex.mathjax_avoid_list([]) # not tested
  11. sage: latex.mathjax_avoid_list() # not tested
  12. []

假设使用view()或在选中”Typeset”按钮后在notebook中生成了LaTeX表达式,然后通过”mathjax避免列表”将其识别为需要使用外部LaTeX。然后,选定的引擎(由latex.engine()指定)将处理LaTeX。但是,Sage不会生成外部查看器(命令行里才会这样做),而是尝试将结果转换为单个图像,然后将其作为输出插入到工作表中。

转换的进行方式取决于几个因素-主要是您指定了哪个可执行文件作为引擎,以及系统上可用的转换工具(可以使用dvips,ps2pdf,dvipngImageMagick套件中的convert)。目标是生成一个PNG文件作为输出,以将其插入回到工作表中。当latex引擎将LaTeX表达式转换为dvi后,dvipng应该可以完成转换。如果LaTeX表达式和所选引擎创建了dvipng无法处理的带有特殊特征的dvi文件,dvips将创建一个PostScript文件。然后使用convert将此类PostScript文件或由pdflatex之类的引擎创建的PDF文件处理为PNG。 可以使用have_dvipng()have_convert()测试其中两个转换器的存在。

如果您安装了必要的转换器,这些转换将自动完成。如果没有,则会显示一条错误消息告诉您缺少什么以及在哪里下载安装。

有关如何处理复杂的LaTeX表达式的具体示例,请参见下一节中的示例(带有tkz-graph的组合图),该示例使用LaTeX的tkz-graph包渲染生成高质量的组合图象。对于其他示例,有一些预安装的测试用例。如下所示,要使用这些对象,必须导入sage.misc.html.latex_examples,该对象是sage.misc.html.LatexExamples类的实例。此类当前有交换图,组合图,结理论和pstrick的示例实现,它们分别行使以下程序包:xy,tkz-graph,xypic,pstricks。导入后,请在latex_examples上使用Tab补全查看预安装的示例。调用每个示例将带给您一些有关使示例正确呈现所需的解释。要实际看到示例,必须使用view()(配置好preamble区,引擎等)。

  1. sage: from sage.misc.html import latex_examples
  2. sage: latex_examples.diagram()
  3. LaTeX example for testing display of a commutative diagram produced
  4. by xypic.
  5. To use, try to view this object -- it won't work. Now try
  6. 'latex.add_to_preamble("\\usepackage[matrix,arrow,curve,cmtip]{xy}")',
  7. and try viewing again. You should get a picture (a part of the diagram arising
  8. from a filtered chain complex).