22 using namespace Cantor;
24 #include <kstandarddirs.h>
25 #include <ktemporaryfile.h>
31 #include <config-cantorlib.h>
34 class Cantor::LatexRendererPrivate
44 QString latexFilename;
47 static const QString
tex=
"\\documentclass[12pt,fleqn]{article} \n "\
48 "\\usepackage{latexsym,amsfonts,amssymb,ulem} \n "\
49 "\\usepackage[dvips]{graphicx} \n "\
50 "\\setlength\\textwidth{5in} \n "\
51 "\\setlength{\\parindent}{0pt} \n "\
53 "\\pagestyle{empty} \n "\
54 "\\begin{document} \n "\
58 static const QString
eqnHeader=
"\\begin{eqnarray*}%1\\end{eqnarray*} \n ";
62 d(new LatexRendererPrivate)
65 d->isEquationOnly=
false;
92 d->header.append(header);
112 d->equationType=type;
117 return d->equationType;
121 void LatexRenderer::setErrorMessage(
const QString& msg)
128 return d->errorMessage;
143 return d->isEquationOnly;
149 return d->latexFilename;
164 connect(
this, SIGNAL(
done()), &event, SLOT(quit()));
165 connect(
this, SIGNAL(
error()), &event, SLOT(quit()));
171 void LatexRenderer::renderWithLatex()
173 kDebug()<<
"rendering using latex method";
174 QString dir=KGlobal::dirs()->saveLocation(
"tmp",
"cantor/");
177 KTemporaryFile *texFile=
new KTemporaryFile();
178 texFile->setPrefix(
"cantor/" );
179 texFile->setSuffix(
".tex" );
182 QString expressionTex=
tex;
183 expressionTex=expressionTex.arg(d->header);
192 expressionTex=expressionTex.arg(d->latexCode);
194 kDebug()<<
"full tex: "<<expressionTex;
196 texFile->write(expressionTex.toUtf8());
199 QString fileName = texFile->fileName();
200 kDebug()<<
"fileName: "<<fileName;
201 d->latexFilename=fileName;
202 d->latexFilename.replace(
".tex",
".eps");
203 KProcess *p=
new KProcess(
this );
204 p->setWorkingDirectory(dir);
208 connect(p, SIGNAL( finished(
int, QProcess::ExitStatus) ),
this, SLOT( convertToPs() ) );
212 void LatexRenderer::convertToPs()
214 kDebug()<<
"converting to ps";
215 QString dviFile=d->latexFilename;
216 dviFile.replace(
".eps",
".dvi");
217 KProcess *p=
new KProcess(
this );
221 connect(p, SIGNAL( finished(
int, QProcess::ExitStatus) ),
this, SLOT( convertingDone() ) );
225 void LatexRenderer::convertingDone()
227 kDebug()<<
"rendered file "<<d->latexFilename;
229 QString dir=KGlobal::dirs()->saveLocation(
"tmp",
"cantor/");
230 QStringList unneededExtensions;
231 unneededExtensions<<
".log"<<
".aux"<<
".tex"<<
".dvi";
232 foreach(
const QString& ext, unneededExtensions)
234 QString s=d->latexFilename;
235 s.replace(
".eps", ext);
240 if(QFileInfo(d->latexFilename).exists())
247 setErrorMessage(
"something is wrong");
252 void LatexRenderer::renderWithMml()
254 kDebug()<<
"WARNING: MML rendering not implemented yet!";
258 #include "latexrenderer.moc"
void addHeader(const QString &header)
bool isEquationOnly() const
static const QString eqnHeader
void setHeader(const QString &header)
QString imagePath() const
static QString latexCommand()
Get Path to the latex executable.
static const QString inlineEqnHeader
void setEquationType(EquationType type)
QString latexCode() const
void setEquationOnly(bool isEquationOnly)
LatexRenderer(QObject *parent=0)
QString errorMessage() const
bool renderingSuccessful() const
EquationType equationType() const
void setMethod(Method method)
void setLatexCode(const QString &src)
static QString dvipsCommand()
Get Path to the dvips executable.