Package: latextools
LatexToolslatextools is a collection of tools for building, rendering, and converting Latex documents.
Output objects integrate with Jupyter and display inline after a code cell allowing for quick design of many Latex diagrams like Tikz and qcircuit.Installlatextools is available on PyPI:python3-mpipinstalllatextoolsPrerequisitespdflatexA distribution of LaTeX that provides thepdflatexcommand needs to be installed separately.
There are many options and instillation is platform-specific.
Below are some examples for installing TeX Live on Linux and MacTeX on macOS.Ubuntusudoaptinstalltexlive# Or texlive-latex-recommended, or texlive-latex-extramacOSUsinghomebrew:brewcaskinstallmactex# Or mactex-no-guiInkscape (optional)Inkscapeis used for conversions from PDF to other image formats.Any OSDownload and run the installer frominkscape.org.macOSUsinghomebrew:brewcaskinstallinkscapeDrawsvg and Cairo (optional)drawsvgandCairoare used for some SVG conversion functions.Ubuntusudoapt-getinstalllibcairo2
python3-mpipinstall"drawsvg[raster]~=2.0"macOSUsinghomebrew:brewinstallcairo
python3-mpipinstall"drawsvg[raster]~=2.0"ExamplesEasily render a bit of Latex codeimportlatextoolsimportrandomnumbers=[[random.randint(0,10000)forxinrange(4)]foryinrange(5)]row=['&'.join('{}'.format(num)fornuminrow)forrowinnumbers]table_body='\\\\\n\\hline\n'.join(row)pdf=latextools.render_snippet(r'''\begin{tabular}{c|c|c|c}A & B & C & E \\\hline\hline'''+table_body+'''\\\end{tabular}'''.strip(),pad=1,)pdf.save('table.pdf')pdf.rasterize('table.png',scale=2)pdf.as_svg().as_drawing(scale=2).save_svg('table.svg')pdf# Show preview if this is in a Jupyter notebookDraw a qcircuit diagramimportlatextoolspdf=latextools.render_qcircuit(r'''% qcircuit code from http://physics.unm.edu/CQuIC/Qcircuit/Qtutorial.pdf& \ctrl{2}& \qw & \gate{H}& \ctrl{1}&\gate{H}& \qw \\& \qw & \ctrl{1}& \gate{H}& \targ &\gate{H}& \qw \\& \targ & \targ & \gate{Z}& \qw & \ctrl{-1} &\qw \gategroup{1}{4}{2}{6}{.7em}{--}''')pdf.save('qcircuit.pdf')pdf.rasterize('qcircuit.png',scale=2)pdf.as_svg().as_drawing(scale=2).save_svg('qcircuit.svg')pdf# Show preview if this is in a Jupyter notebookEmbed latex in an SVG vector drawingimportlatextoolsimportdrawsvgasdraw# pip3 install drawsvg# Render latexlatex_eq=latextools.render_snippet(r'$\sqrt{X^\dag}$',commands=[latextools.cmd.all_math])svg_eq=latex_eq.as_svg()# Use the rendered latex in a vector drawingd=draw.Drawing(100,100,origin='center')d.append(draw.Circle(0,0,49,fill='yellow',stroke='black',stroke_width=2))d.draw(svg_eq,x=0,y=0,center=True,scale=2.5)d.save_svg('vector.svg')d.save_png('vector.png')# Display in Jupyter notebook#d.rasterize()  # Display as PNGd.display_inline()# Display as SVGRender an SVG that contains text with LaTeX equations and macrosimportlatextoolsimportdrawsvgasdraw# pip3 install drawsvg# Create an SVG drawing with latex-formatted textd=draw.Drawing(100,100,origin='center')d.append(draw.Circle(0,0,49,fill='yellow',stroke='black',stroke_width=2))d.append(draw.Text(r'\Huge$\sqrt{X^\dag}$',30,0,14,center=True))# Render entire drawing as latexpdf=latextools.render_svg(d)pdf.save('vector2.pdf')pdf.rasterize('vector2.png',scale=2)# Display in Jupyter notebook#pdf.rasterize(scale=2)  # Display as PNGpdf# Display as PDFBuild and render a full Latex projectimportlatextools# Build a Latex documentpackages=[latextools.pkg.qcircuit,latextools.LatexPackage('geometry',('paperheight=2.5in','paperwidth=2.5in','margin=0.1in','heightrounded')),]commands=[latextools.cmd.ceil,]config=latextools.DocumentConfig('article',('',))proj=latextools.LatexProject()content=latextools.BasicContent(r'''%\[\Qcircuit @R=.1em @C=0.3em @!R {&	\qw	&	\qw	&	\ctrl{2}	&	\qw	&	\qw	&	\qw	&	\qw	&	\qw	&	\qw	\\&	\qw	&	\qw	&	\qw	&	\qw	&	\ctrl{1}	&	\qw	&	\qw	&	\qw	&	\qw	\\&	\push{\ket{0}}\qw	&	\qw	&	\targ	&	\targ	&	\targ	&	\targ	&	\qw	&	\meter	&	\qw	\\&	\qw	&	\qw	&	\targ	&	\ctrl{-1}	&	\qw	&	\qw	&	\qw	&	\qw	&	\qw	\\&	\qw	&	\qw	&	\qw	&	\targ	&	\qw	&	\ctrl{-2}	&	\qw	&	\qw	&	\qw	\\&	\push{\ket{0}}\qw	&	\gate{H}	&	\ctrl{-2}	&	\ctrl{-1}	&	\ctrl{1}	&	\ctrl{2}	&	\gate{H}	&	\meter	&	\qw	\\&	\qw	&	\qw	&	\qw	&	\qw	&	\targ	&	\qw	&	\qw	&	\qw	&	\qw	\\&	\qw	&	\qw	&	\qw	&	\qw	&	\qw	&	\targ	&	\qw	&	\qw	&	\qw	\\}%\]''',packages,commands)doc=content.as_document(path='figs/syndrome-circuit.tex',config=config)doc=latextools.LatexDocument(path='figs/syndrome-circuit.tex',config=config,contents=(latextools.BasicContent('\centering A qcircuit diagram:'),content,))proj.add_file(doc)# Write Latex source code to current directory (maintains directory structure)proj.write_src('.')# Render Latexproj.add_file(latextools.LatexDocument(path='main.tex',config=config,contents=doc.contents))pdf=proj.compile_pdf()# With additional command line arguments:#pdf = proj.compile_pdf(options=['-halt-on-error', '-file-line-error',#                                '-interaction', 'nonstopmode', '-shell-escape'])pdf.save('figs/syndrome-circuit.pdf')pdf# Show preview if this is in a Jupyter notebook