Add Math Support: Difference between revisions

From Scribus Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 2: Line 2:
[[Add Math Support/Abstract|Abstract]] is available too.
[[Add Math Support/Abstract|Abstract]] is available too.
== Rationale ==  
== Rationale ==  
I often wanted to have a tool that allows complicated layouts but still is easy to use. This is exactly what scribus does. However for scientific papers it lacks one main capability: Formulas. So I want to add these as my summer of code project.
I often wanted to have a tool that allows complicated layouts but still is easy to use. This is exactly what Scribus does. However for scientific papers it lacks one main capability: Formulas. So I want to add these as my summer of code project.
The bugtracker also lists requests for math support
The bug tracker also lists requests for math support
* [http://bugs.scribus.net/view.php?id=128 TeX Rendering]
* [http://bugs.scribus.net/view.php?id=128 TeX Rendering]
* [http://bugs.scribus.net/view.php?id=1030 Math support]
* [http://bugs.scribus.net/view.php?id=1030 Math support]
Line 15: Line 15:
== Overview ==
== Overview ==


In IRC we came to the conclusion that it probably is the best to use a approch like [http://www.bluesky.com/mathsetter/index.html MathSetter].
In IRC we came to the conclusion that it probably is the best to use a approach like [http://www.bluesky.com/mathsetter/index.html MathSetter].
* Let the user enter LaTeX source (perhaps using LyX's editor)
* Let the user enter LaTeX source (perhaps using LyX's editor)
* Run latex
* Run latex
Line 24: Line 24:


=== Implementation ===
=== Implementation ===
I'll try to create this as a C++-Plugin. If core changes are required I'll restrict the to the minimum level required. As much of the new functionality as possible will be exposed to the python interface.  
I'll try to create this as a C++-Plugin. If core changes are required I'll restrict the to the minimum level required. As much of the new functionality as possible will be exposed to the Python interface.  


=== Image frame vs. group of vectors ===
=== Image frame vs. group of vectors ===
I was told that image frames are easier to handle internally than groups of vectors and consume less memory. However vectors offer more flexibility (see example below). A good solution for this problem: Use image frames and provide a "Convert to Outlines" as it is done for text frames. The ability to edit the forumla's contents is lost, however it's the same with text-frames.  
I was told that image frames are easier to handle internally than groups of vectors and consume less memory. However vectors offer more flexibility (see example below). A good solution for this problem: Use image frames and provide a "Convert to Outlines" as it is done for text frames. The ability to edit the formula's contents is lost, however it's the same with text-frames.  


=== Objects ===
=== Objects ===
There will be a new object that consists of a group of vector objects (these objects are created by importing the EPS or PDF output of latex) and which has a property that stores the latex source. For editing this property either a simple text dialog (syntax highlighting?) is displayed or LyX is started with the existing text loaded as the default file.  
The parent object for my addition will be [http://docs.scribus.net/devel/classPageItem__ImageFrame.html PageItem_ImageFrame], i.e. normal ImageFrames. A property that stores the LaTeX source and functions to process the LaTeX source will be added. For editing either a simple text dialog (perhaps with syntax highlighting) is displayed or LyX is started with the existing text loaded as the default file.  
Parent object will be [http://docs.scribus.net/devel/classPageItem__ImageFrame.html PageItem_ImageFrame].
 


=== Processing the latex input ===
=== Processing the latex input ===
When the user has finished editing latex is run with a temporary file created by inserting the userinput to the template (see below). preview.sty is used to create a DVI file with a matching boundingbox. The DVI is converted to either PDF or EPS and then imported (functions for import are already included in scribus).  
When the user has finished editing, LaTeX is run with a temporary file created by inserting the user's input to the template (see below). preview.sty is used to create a DVI file with a matching bounding box. The DVI is converted to either PDF or EPS and then imported (functions for import are already included in scribus).  


=== Handling missing latex / wrong syntax ===
=== Handling missing latex / wrong syntax ===
Line 46: Line 46:


== Use cases ==
== Use cases ==
* Scientific posters
* Scientific posters  
It is very hard (if not even impossible) to create good-looking posters with LaTeX but it's easy to add formulas to LaTeX documents. On the other hand it's very easy to create good posters with scribus but a complicated process is necessary to add just a single formula. The ability to use LaTeX for typesetting the forumla and the post-processing it in scribus (easily possible, after all it's just a vector graphic from scribus' point of view) would greatly simplify this.
It is very hard (if not impossible) to create good-looking posters with LaTeX but it's easy to add formulas to LaTeX documents. On the other hand it's very easy to create good posters with Scribus, but a complicated process is necessary to add just a single formula. The ability to use LaTeX for typesetting the formula and then post-processing it in Scribus (easily possible, after all it's just a vector graphic from Scribus' point of view) would greatly simplify this.  
 
* Math/Physics teachers
At school I've seen a lot of teachers that created their tests with Microsoft Word and relying on its forumla editor or even on basic text formatting (sub-/superscript) and adding any "complicated" math symbols (vectors, integrals, etc.) by hand in the printout. Obviously the full power of latex is something they are unwilling to learn (and it is probably not required for them). So I belive they would be happy to have a WYSIWYG tool that supports embedded forumlas.


* Math/Physics teachers
At school, I've seen a lot of teachers who created their tests with Microsoft Word and relied on its formula editor or even on basic text formatting (sub-/superscript). They added any "complicated" math symbols (vectors, integrals, etc.) by hand to the printout. Obviously the full power of LaTeX is something they are unwilling to learn (and it is probably not required for them). So I believe they would be happy to have a WYSIWYG tool that supports embedded formulas.


* There a many more use cases and I think virtually anybody involved in natural sciences will at some point be disappointed by his existing software (Word or Latex) because it is hard to get the wanted layout. Then they might look for alternatives...
* There a many more use cases and I think virtually anybody involved in natural sciences will at some point be disappointed by his existing software (Word or Latex) because it is hard to get the wanted layout. Then they might look for alternatives...
Line 59: Line 58:
=== Examples ===
=== Examples ===
* [http://r2d2.stefanm.com/physik_formeln.pdf Physics formulary]
* [http://r2d2.stefanm.com/physik_formeln.pdf Physics formulary]
* [http://r2d2.stefanm.com/Einstein.pdf A sample showing that vectors are also usefull]
* [http://r2d2.stefanm.com/Einstein.pdf A sample showing that vectors are also useful]


== Related ==
== Related ==
Line 73: Line 72:


=== Spinoffs ===
=== Spinoffs ===
(Nice things that might be possible but are not guranteed to work)
(Nice things that might be possible but are not guaranteed to work)


This should also be usable to import editable graphs generated in latex (pstricks) and even would provide some support for (latex-style) tables. Formating the table text is however restricted to latex's capabilities and editing has to be done in latex-syntax.
This should also be usable to import editable graphs generated in latex (pstricks) and even would provide some support for (latex-style) tables. Formating the table text is however restricted to latex's capabilities and editing has to be done in latex-syntax.
Line 79: Line 78:
== Timeline ==
== Timeline ==
* Total time available: 4 month
* Total time available: 4 month
* Time allocated for coding in the offical timeline: 3 month
* Time allocated for coding in the official timeline: 3 month
* Time I'll be not available because I have to learn for tests: about 2 weeks (don't know the dates yet)
* Time I'll be not available because I have to learn for tests: about 2 weeks (don't know the dates yet)
* I think there is enough time to do this job in time and also to cope with unforseen events.
* I think there is enough time to do this job in time and also to cope with unforeseen events.


=== Detailed timeline ===
=== Detailed timeline ===
'''(bold is from Google's timeline)'''
'''(bold is from Google's timeline)'''
* '''April 9: List of accepted student applications published on code.google.com (Interim Period: Students learn more about their project communities)'''
* '''April 9: List of accepted student applications published on code.google.com (Interim Period: Students learn more about their project communities)'''
* I make myself familiar with Scribus' and LyX's code. I also start coding but don't expect too much usefull stuff first. Trying different approches where they make sense and discuss this with the community.
* I make myself familiar with Scribus' and LyX's code. I also start coding but don't expect too much useful stuff first. Trying different approaches where they make sense and discuss this with the community.
* '''May 28: Students begin coding for their GSoC projects; Google begins issuing initial student payments'''
* '''May 28: Students begin coding for their GSoC projects; Google begins issuing initial student payments'''
* Now I add the main functionality to Scribus and start playing with the GUI. (I'll split this down into smaller parts once I know enough about Scribus' internal workings.)
* Now I add the main functionality to Scribus and start playing with the GUI. (I'll split this down into smaller parts once I know enough about Scribus' internal workings.)
* '''July 9: Students upload code to code.google.com/hosting; mentors begin mid-term evaluations'''
* '''July 9: Students upload code to code.google.com/hosting; mentors begin mid-term evaluations'''
* Code for running LaTeX and displaying the results should be ready now.  
* Code for running LaTeX and displaying the results should be ready now.  
* Mainfocus during July will be the GUI
* Main focus during July will be the GUI.
* In August I'll focus on Phyton bindings and come up with a usable LaTeX template. I'll be quite familiar with Scribus' code so this shouldn't take too long.  
* In August I'll focus on Phyton bindings and come up with a usable LaTeX template. I'll be quite familiar with Scribus' code so this shouldn't take too long.  
* Afterwards I'll write documentation (most documentation will allready be done while writing the corresponding code)
* Afterwards I'll write documentation (most documentation will already be done while writing the corresponding code)
* '''August 20: Students upload code to code.google.com/hosting; mentors begin final evaluations; students begin final program evaluations'''
* '''August 20: Students upload code to code.google.com/hosting; mentors begin final evaluations; students begin final program evaluations'''
* '''August 31: Final evaluation deadline; Google begins issuing student and mentoring organization payments'''
* '''August 31: Final evaluation deadline; Google begins issuing student and mentoring organization payments'''

Revision as of 16:20, 21 March 2007

Add Math Support

Abstract is available too.

Rationale

I often wanted to have a tool that allows complicated layouts but still is easy to use. This is exactly what Scribus does. However for scientific papers it lacks one main capability: Formulas. So I want to add these as my summer of code project. The bug tracker also lists requests for math support

there's a feature request in the Debian database

and it's also on the

So quite a lot of people seem to want this feature.

Overview

In IRC we came to the conclusion that it probably is the best to use a approach like MathSetter.

  • Let the user enter LaTeX source (perhaps using LyX's editor)
  • Run latex
  • Read latex's output
  • Display this output instead of the source.

Details

Implementation

I'll try to create this as a C++-Plugin. If core changes are required I'll restrict the to the minimum level required. As much of the new functionality as possible will be exposed to the Python interface.

Image frame vs. group of vectors

I was told that image frames are easier to handle internally than groups of vectors and consume less memory. However vectors offer more flexibility (see example below). A good solution for this problem: Use image frames and provide a "Convert to Outlines" as it is done for text frames. The ability to edit the formula's contents is lost, however it's the same with text-frames.

Objects

The parent object for my addition will be PageItem_ImageFrame, i.e. normal ImageFrames. A property that stores the LaTeX source and functions to process the LaTeX source will be added. For editing either a simple text dialog (perhaps with syntax highlighting) is displayed or LyX is started with the existing text loaded as the default file.


Processing the latex input

When the user has finished editing, LaTeX is run with a temporary file created by inserting the user's input to the template (see below). preview.sty is used to create a DVI file with a matching bounding box. The DVI is converted to either PDF or EPS and then imported (functions for import are already included in scribus).

Handling missing latex / wrong syntax

When latex is missing the display of the object is replaced by the error message (or the source?) and a problem is flagged in the preflight verifier.

Template

There should be a template so the user only has to type the formula and no header. However it is probably a good idea to allow disabling/replacing the template (or at lest the non-required (preview.sty) parts) so the user can define own styles.

Helping the user

I plan to make things as comfortable to the users as possible, e.g. selecting a font, colors, sizes, etc. via a GUI (either via a modified LyX or with the editor directly embedded)

Use cases

  • Scientific posters

It is very hard (if not impossible) to create good-looking posters with LaTeX but it's easy to add formulas to LaTeX documents. On the other hand it's very easy to create good posters with Scribus, but a complicated process is necessary to add just a single formula. The ability to use LaTeX for typesetting the formula and then post-processing it in Scribus (easily possible, after all it's just a vector graphic from Scribus' point of view) would greatly simplify this.

  • Math/Physics teachers

At school, I've seen a lot of teachers who created their tests with Microsoft Word and relied on its formula editor or even on basic text formatting (sub-/superscript). They added any "complicated" math symbols (vectors, integrals, etc.) by hand to the printout. Obviously the full power of LaTeX is something they are unwilling to learn (and it is probably not required for them). So I believe they would be happy to have a WYSIWYG tool that supports embedded formulas.

  • There a many more use cases and I think virtually anybody involved in natural sciences will at some point be disappointed by his existing software (Word or Latex) because it is hard to get the wanted layout. Then they might look for alternatives...

... and find Scribus! So this will attract new users to scribus and (perhaps) open source in general.

Examples

Related

  • The barcode generator works similar to this, but has a major drawback: It's not possible to edit it once a barcode is placed.
  • Various LaTeX to HTML tools might be a good starting point to check how the EPS/PDF is best created.

Deliverables

  • A plugin (or if that doesn't work a patch) that adds frames, that run latex to get their content.
  • Patch to add configuration options for LaTeX path.
  • Python bindings (compatible at least with version 2.4 and 2.5)
  • One or more LaTeX templates.
  • Documentation

Spinoffs

(Nice things that might be possible but are not guaranteed to work)

This should also be usable to import editable graphs generated in latex (pstricks) and even would provide some support for (latex-style) tables. Formating the table text is however restricted to latex's capabilities and editing has to be done in latex-syntax.

Timeline

  • Total time available: 4 month
  • Time allocated for coding in the official timeline: 3 month
  • Time I'll be not available because I have to learn for tests: about 2 weeks (don't know the dates yet)
  • I think there is enough time to do this job in time and also to cope with unforeseen events.

Detailed timeline

(bold is from Google's timeline)

  • April 9: List of accepted student applications published on code.google.com (Interim Period: Students learn more about their project communities)
  • I make myself familiar with Scribus' and LyX's code. I also start coding but don't expect too much useful stuff first. Trying different approaches where they make sense and discuss this with the community.
  • May 28: Students begin coding for their GSoC projects; Google begins issuing initial student payments
  • Now I add the main functionality to Scribus and start playing with the GUI. (I'll split this down into smaller parts once I know enough about Scribus' internal workings.)
  • July 9: Students upload code to code.google.com/hosting; mentors begin mid-term evaluations
  • Code for running LaTeX and displaying the results should be ready now.
  • Main focus during July will be the GUI.
  • In August I'll focus on Phyton bindings and come up with a usable LaTeX template. I'll be quite familiar with Scribus' code so this shouldn't take too long.
  • Afterwards I'll write documentation (most documentation will already be done while writing the corresponding code)
  • August 20: Students upload code to code.google.com/hosting; mentors begin final evaluations; students begin final program evaluations
  • August 31: Final evaluation deadline; Google begins issuing student and mentoring organization payments

Links

  • TeX Rendering (Discussion)
  • Math support (Discussion)
  • KFormula (Formula editor, output does not look satisfying)
  • TeXmacs (very good looking formula editor, not based on TeX or Emacs despite its name)
  • LyX (WYSIWYG LaTeX editor)
  • sklatex, a LaTeX plugin for skencil. Definitely worth a look!
  • SketchLaTex, another LaTeX plugin for skencil. Please investigate before re-inventing the wheel!
  • Tex Text, a third LaTeX plugin for skencil.
  • Latex Text Frames Related idea from the projects list.