LaTex in matplotlib

I am trying to connect LaTex in matplotlib and I can’t do it right.

I did based on this information. Installed MiKTeX, dvipng and Ghostscript.

    import matplotlib
    matplotlib.use('agg') 
    import matplotlib.pyplot as plt
    from sympy import latex
    ...

    # sympy.latex() returned \left[\begin{matrix}2 & 4 & 6\\4 & 6 & 8\\8 & 6 & 4\end{matrix}\right]
    latex_to_img(r"$\left[\begin{matrix}2 & 4 & 6\\4 & 6 & 8\\8 & 6 & 4\end{matrix}\right]$", FILE_NAME_MATRIX)

    ...
    def latex_to_img(str_latex, file_name):

        plt.rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
        plt.rc('text', usetex=True)

        fig = plt.figure()
        ax = fig.add_axes([0,0,1,1])
        ax.set_axis_off()
        t = ax.text(0.5, 0.5, str_latex, 
                horizontalalignment='center', 
                verticalalignment='center',
                fontsize=32, 
                color='black')
        ax.figure.canvas.draw()
        bbox = t.get_window_extent()
        fig.set_size_inches(bbox.width/80, bbox.height/80) # dpi=80
        save(file_name, config.FILE_EXPANSION)

I get such a list:

RuntimeError: latex was not able to process the following string: b'$\\left[\\begin{matrix}2 & 4 & 6\\\\4 & 6 & 8\\\\8 & 6 & 4\\end{matrix}\\right]$'

Here is the full report generated by latex: This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/W32TeX) (preloaded format=latex) restricted \write18 enabled. entering extended mode (c:/Users/myname/.matplotlib/tex.cache/7b0c91ed78ceb07701f3d2b71c0c8048.te x LaTeX2e <2018-12-01> (c:/texlive/2019/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (c:/texlive/2019/texmf-dist/tex/latex/base/size10.clo)) (c:/texlive/2019/texmf-dist/tex/latex/type1cm/type1cm.sty) (c:/texlive/2019/texmf-dist/tex/latex/psnfss/helvet.sty (c:/texlive/2019/texmf-dist/tex/latex/graphics/keyval.sty)) (c:/texlive/2019/texmf-dist/tex/latex/base/textcomp.sty (c:/texlive/2019/texmf-dist/tex/latex/base/ts1enc.def (c:/texlive/2019/texmf-dist/tex/latex/base/ts1enc.dfu))) (c:/texlive/2019/texmf-dist/tex/latex/base/inputenc.sty) (c:/texlive/2019/texmf-dist/tex/latex/geometry/geometry.sty (c:/texlive/2019/texmf-dist/tex/generic/oberdiek/ifpdf.sty) (c:/texlive/2019/texmf-dist/tex/generic/oberdiek/ifvtex.sty) (c:/texlive/2019/texmf-dist/tex/generic/ifxetex/ifxetex.sty)

Package geometry Warning: Over-specification in h'-direction. width' (5058.9pt) is ignored.

Package geometry Warning: Over-specification in v'-direction. height' (5058.9pt) is ignored.

) (./7b0c91ed78ceb07701f3d2b71c0c8048.au x) (c:/texlive/2019/texmf-dist/tex/latex/base/ts1cmr.fd) geometry driver: auto-detecting geometry detected driver: dvips (c:/texlive/2019/texmf-dist/tex/latex/psnfss/ot1phv.fd) ! Misplaced alignment tab character &. l.14 ...000000}{\sffamily $\left[\begin{matrix}2 & 4 & 6\4 & 6 & 8\8 & 6 &... No pages of output. Transcript written on 7b0c91ed78ceb07701f3d2b71c0c8048.lo g.

Upvotes: 1

Views: 2382

Answers (2)

The problem was in the ampersand (&). Found a solution here

Upvotes: 0

Siddharth Das
Siddharth Das

Reputation: 1115

Add these two lines

matplotlib.rcParams['text.usetex']=True
matplotlib.rcParams['text.latex.unicode']=True

Upvotes: 1

Related Questions