Библиотека alTeX. Примеры использования

Модуль экспорта для Delphi

Для Delphi разработан модуль alTex.pas, который упрощает работу с dll. Модуль предоставляет для использования единственный экземпляр объекта класса TMathExpression, методы которого обращаются к dll. Методы класса аналогичны экспортируемым функциям dll. Некоторые из них перекрыты чтобы упростить задание параметров.

Экземпляр класса TMathExpression создается вызовом функции MathExpression. При первом вызове подгружается библиотека alTex.dll.

Отображение формулы

pascal
procedure TForm3.Button1Click(Sender: TObject);
var sz:TPoint;
    S:String;
begin
   S := '$$ e=\lim_{n\to\infty} \left( 1+\frac{1}{n} \right) ^n $$';
   MathExpression.Paint(Image1.Canvas, S, clMaroon);

   sz := MathExpression.Size(S);

   Image1.Canvas.Pen.Color := clGreen;
   Image1.Canvas.MoveTo(0, Sz.Y);
   Image1.Canvas.LineTo(sz.X+5, Sz.Y);
   Image1.Canvas.MoveTo(sz.X, 0);
   Image1.Canvas.LineTo(Sz.X, Sz.Y+10);
   Image1.Refresh;
end;

Здесь кроме собственно отбражения формулы запрашивается необходимый размер и вокруг формулы рисуется рамка:



Запись изображения в файл

pascal
procedure TForm3.Button2Click(Sender: TObject);
var S:String;
begin
   S := '$$ \sum_{k=1}^n \frac1{k^2} $$';
   //MathExpression.ToFile(S, '.\__history\test.bmp', $C5D5C5, clMaroon);
   MathExpression.ToFile(S, '.\__history\test.jpg', clWhite, clBlue);
   MathExpression.ToFile(S, '.\__history\test.gif', $FFFFFF, clBlack);
end;

Здесь изображение одной и той-же формулы сохраняется в два файла разного типа. соответственно получаем следующие рисунки:



Использование сложного фона

Учитывайте, что формулы отображаются при включенном режиме SmoothingModeAntiAlias. Как правило это приводит к некоторому размытию границ текста с учетом цвета фона. Именно поэтому для записи изображения в файл требуется задание цвета фона. Если фон, на котором отображается формула имеет какую-то структуру, то лучше добавить для формулы тень (просто отобразить ее два раза с небольшим смещением). Например:

pascal
procedure TForm3.Button3Click(Sender: TObject);
var g:TGPGraphics;
    brush : TGPLinearGradientBrush;
    sz:TPoint;
    S : String;
    X, Y : integer;
begin
   g := TGPGraphics.Create(Image1.Canvas.Handle);
   brush := TGPLinearGradientBrush.Create(
                  makePoint(0, 0),
                  makePoint(200, 100),
                  aclBlack, aclRed);
   try
      g.FillRectangle(brush, 0, 0, 200, 100);

      S := '$$ \zeta(s)={\frac{1}{\displaystyle\prod_{i=1}^\infty '+
           '   \Bigl(1-{\dfrac 1 {p_i^s}}\Bigr)}} $$';

      sz := MathExpression.Size(S);
      X := (200 - sz.x) div 2;
      Y := (100 - sz.y) div 2;

      MathExpression.Paint(Image1.Canvas, X+1, Y+1, S, clBlack);
      MathExpression.Paint(Image1.Canvas, X, Y, S, clYellow);   
   finally
      g.free;
   end;
   Image1.Refresh;
end;



Еще несколько примеров, чтобы получить представление о возможностях.

$$ \iiint\limits_{\mathcal{G}} \! \left[ u\nabla^2v + \left( \nabla u, \nabla v \right)\right]d^3V = 
   \oiint\limits_{\mathcal{S}} u \frac{ \partial v}{\partial \n} d^2A 
$$

$$ \iiint\limits_{\mathcal{G}} \! \left[ u\nabla^2v - v\nabla^2u\right]d^3V = 
   \oiint\limits_{\mathcal{S}} \left( u \frac{ \partial v}{\partial \n} -
                               v \frac{ \partial u}{\partial \n} \right) d^2A 
$$

$$ \begin{eqnarray} 
      ds^2 &=\left ( 1- \frac{2 M r}{r^2+a^2 M^2 \cos^2 \theta } \right ) dt^2 + 
           \frac{4 M^2 a r \sin^2 \theta}{r^2+a^2 M^2 \cos^2 \theta} dt d 
           \varphi - \frac{r^2+a^2 M^2 \cos^2 \theta}{r^2-2 M r+a^2 M^2} dr^2 - \\ 
      & \qquad - (r^2+a^2 M^2 \cos^2 \theta ) d \theta^2 - \sin^2 \theta 
      \left ( r^2+a^2 M^2 + \frac{2 M^3 a^2 r \sin^2 \theta}{r^2+a^2 M^2 
      \cos^2 \theta} \right ) d \varphi^2 
    \end{eqnarray}
$$

$$ \euler{
     \sum_a^b f(x) \, \delta x = \int_a^b f(x) \, dx + \sum\limits_{k \geq 1} 
      \frac{B_k}{k!} f^{(k-1)} (x) \biggr|_a^b
   }
$$

Valenzetti Equation

$$ 
  T = \frac{N}{g_0(m_0, \sigma)} \left[ 
      1 - \frac1N \sum_{i=1}^N \frac{N_{\rm bg} \beta(m_i)}{p(m_i)} \right] 
$$
$ (3a) $
$$ 
 m_0 = -\sigma \frac{g_1(m_0,\sigma)}{g_0(m_0, \sigma)} + 
       \frac {\overline{m} - N^{-1} \sum_{i=1}^N [N_{\rm bg} \beta(m_i)/p(m_i)]m_i}
             {1 - N^{-1} \sum_{i=1}^N N_{\rm bg} \beta(m_i)/p(m_i)}
$$
$ (3b) $
$$ \sigma^2 = \frac{g_0(m_0, \sigma)}{g_2(m_0, \sigma)} \left\{
   \frac{{\rm Var} + (\overline{m}-m_0)^2 -
         N^{-1} \sum_{i=1}^N [N_{\rm bg} \beta(m_i)/p(m_i)](m_i-m_0)^2}
        {1-N^{-1} \sum_{i=1}^N N_{\rm bg} \beta(m_i)/p(m_i)} 
   \right\}
$$
$ (3c) $

2009 - 29 сентября 2012


Copyright © 2009-2014 by