A collection of tools for building, rendering, and converting Latex documents
Project description
LatexTools
latextools 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.
Install
latextools is available on PyPI:
python3 -m pip install latextools
Prerequisites
pdflatex
A distribution of LaTeX that provides the pdflatex
command 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.
Ubuntu
sudo apt install texlive # Or texlive-latex-recommended, or texlive-latex-extra
macOS
Using homebrew:
brew cask install mactex # Or mactex-no-gui
Inkscape (optional)
Inkscape is used for conversions from PDF to other image formats.
Any OS
Download and run the installer from inkscape.org.
macOS
Using homebrew:
brew cask install inkscape
drawSvg and Cairo (optional)
drawSvg and Cairo are used for some SVG conversion functions.
Ubuntu
sudo apt-get install libcairo2
python3 -m pip install drawSvg
macOS
Using homebrew:
brew install cairo
python3 -m pip install drawSvg
Examples
Easily render a bit of Latex code
import latextools
import random
numbers = [[random.randint(0, 10000) for x in range(4)]
for y in range(5)]
row = ['&'.join('{}'.format(num) for num in row)
for row in numbers]
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).saveSvg('table.svg')
pdf # Show preview if this is in a Jupyter notebook
Draw a qcircuit diagram
import latextools
pdf = 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).saveSvg('qcircuit.svg')
pdf # Show preview if this is in a Jupyter notebook
Embed latex in an SVG vector drawing
import latextools
import drawSvg as draw # pip3 install drawSvg
# Render latex
latex_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 drawing
d = draw.Drawing(100, 100, origin='center', displayInline=False)
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.saveSvg('vector.svg')
d.savePng('vector.png')
# Display in Jupyter notebook
#d.rasterize() # Display as PNG
d # Display as SVG
Render an SVG that contains text with LaTeX equations and macros
import latextools
import drawSvg as draw # pip3 install drawSvg
# Create an SVG drawing with latex-formatted text
d = draw.Drawing(100, 100, origin='center', displayInline=False)
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 latex
pdf = latextools.render_svg(d)
pdf.save('vector2.pdf')
pdf.rasterize('vector2.png', scale=2)
# Display in Jupyter notebook
#pdf.rasterize(scale=2) # Display as PNG
pdf # Display as PDF
Build and render a full Latex project
import latextools
# Build a Latex document
packages = [
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 Latex
proj.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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for latextools-0.4.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | de48632e030eb541a3218bacfbc91631f6770bdd402937347ded48a99fa54e35 |
|
MD5 | 1b99da3de5b1be671042bbacd67e1838 |
|
BLAKE2b-256 | 22591cd79c3c1bc6bd65c492a3d72407664df879e79c79a30a73fd564fadc47a |