In order to support latex formatting, an object should define a special method _latex_(self) that returns a string, which will be typeset in a mathematical mode (the exact mode depends on circumstances).
Bases: sage.misc.latex.LatexCall
Enter, e.g.,
%latex
The equation $y^2 = x^3 + x$ defines an elliptic curve.
We have $2006 = \sage{factor(2006)}$.
in an input cell in the notebook to get a typeset version. Use %latex_debug to get debugging output.
Use latex(...) to typeset a Sage object. Use LatexExpr to typeset LaTeX code that you create by hand.
Use %slide instead to typeset slides.
Warning
You must have dvipng (or dvips and convert) installed on your operating system, or this command won’t work.
EXAMPLES:
sage: latex(x^20 + 1)
x^{20} + 1
sage: latex(FiniteField(25,'a'))
\Bold{F}_{5^{2}}
sage: latex("hello")
\text{\texttt{hello}}
sage: LatexExpr(r"\frac{x^2 - 1}{x + 1} = x - 1")
\frac{x^2 - 1}{x + 1} = x - 1
LaTeX expressions can be added; note that a space is automatically inserted:
sage: LatexExpr(r"y \neq") + latex(x^20 + 1)
y \neq x^{20} + 1
Append to the string of extra LaTeX macros, for use with %latex, %html, and %mathjax.
INPUT:
EXAMPLES:
sage: latex.extra_macros()
''
sage: latex.add_macro("\\newcommand{\\foo}{bar}")
sage: latex.extra_macros()
'\\newcommand{\\foo}{bar}'
sage: latex.extra_macros("") # restore to default
Adds a \usepackage{package_name} instruction to the latex preamble if not yet present there, and if package_name.sty is available in the LaTeX installation.
INPUT:
See also
TESTS:
sage: latex.add_package_to_preamble_if_available("xypic")
sage: latex.add_package_to_preamble_if_available("nonexistent_package")
sage: latex.extra_preamble() # optional - latex
'\\usepackage{xypic}\n'
sage: latex.extra_preamble('')
Deprecated. Use add_to_mathjax_avoid_list() instead.
EXAMPLES:
sage: latex.add_to_jsmath_avoid_list('\text')
doctest:...: DeprecationWarning: Use add_to_mathjax_avoid_list instead.
See http://trac.sagemath.org/13508 for details.
sage: latex.mathjax_avoid_list([]) # reset list to default
Add to the list of strings which signal that MathJax should not be used when ‘view’ing.
INPUT:
If you want to replace the current list instead of adding to it, use latex.mathjax_avoid_list.
EXAMPLES:
sage: latex.add_to_mathjax_avoid_list("\\mathsf")
sage: latex.mathjax_avoid_list() # display current setting
['\\mathsf']
sage: latex.add_to_mathjax_avoid_list("tkz-graph")
sage: latex.mathjax_avoid_list() # display current setting
['\\mathsf', 'tkz-graph']
sage: latex.mathjax_avoid_list([]) # reset to default
sage: latex.mathjax_avoid_list()
[]
Append to the string s of extra LaTeX macros, for use with %latex. Anything in this string won’t be processed by %mathjax.
EXAMPLES:
sage: latex.extra_preamble()
''
sage: latex.add_to_preamble("\\DeclareMathOperator{\\Ext}{Ext}")
At this point, a notebook cell containing
%latex
$\Ext_A^*(\GF{2}, \GF{2}) \Rightarrow \pi_*^s*(S^0)$
will be typeset correctly.
sage: latex.add_to_preamble("\\usepackage{xypic}")
sage: latex.extra_preamble()
'\\DeclareMathOperator{\\Ext}{Ext}\\usepackage{xypic}'
Now one can put various xypic diagrams into a %latex cell, such as
%latex
\[ \xymatrix{ \circ \ar `r[d]^{a} `[rr]^{b} `/4pt[rr]^{c} `[rrr]^{d}
`_dl[drrr]^{e} [drrr]^{f} & \circ & \circ & \circ \\ \circ & \circ &
\circ & \circ } \]
Reset the preamble to its default, the empty string:
sage: latex.extra_preamble('')
sage: latex.extra_preamble()
''
Controls whether Sage uses blackboard bold or ordinary bold face for typesetting ZZ, RR, etc.
INPUT:
OUTPUT:
If t is None, return the current setting (True or False).
If t is True, use blackboard bold (\mathbb); otherwise use boldface (\mathbf).
EXAMPLES:
sage: latex.blackboard_bold()
False
sage: latex.blackboard_bold(True)
sage: latex.blackboard_bold()
True
sage: latex.blackboard_bold(False)
INPUT:
Emit a warning if the local LaTeX installation does not include file_name. The string more_info is appended to the warning message. The warning is only emitted the first time this method is called.
EXAMPLES:
sage: latex.check_file("article.cls") # optional - latex
sage: latex.check_file("some_inexistent_file.sty")
Warning: `some_inexistent_file.sty` is not part of this computer's TeX installation.
sage: latex.check_file("some_inexistent_file.sty")
sage: latex.check_file("some_inexistent_file.sty", "This file is required for blah. It can be downloaded from: http://blah.org/")
Warning: `some_inexistent_file.sty` is not part of this computer's TeX installation.
This file is required for blah. It can be downloaded from: http://blah.org/
This test checks that the bug in trac ticket #9091 is fixed:
sage: latex.check_file("article.cls", "The article class is really critical.") # optional - latex
Set Sage to use e as latex engine when typesetting with view(), in %latex cells, etc.
INPUT:
If e is None, return the current engine.
If using the XeLaTeX engine, it will almost always be necessary to set the proper preamble with extra_preamble() or add_to_preamble(). For example:
latex.extra_preamble(r'''\usepackage{fontspec,xunicode,xltxtra}
\setmainfont[Mapping=tex-text]{some font here}
\setmonofont[Mapping=tex-text]{another font here}''')
EXAMPLES:
sage: latex.engine()
'pdflatex'
sage: latex.engine("latex")
sage: latex.engine()
'latex'
sage: latex.engine("xelatex")
sage: latex.engine()
'xelatex'
Compiles the formatted tex given by x as a png and writes the output file to the directory given by filename.
INPUT:
Warning
When using latex (the default), you must have ‘dvipng’ (or ‘dvips’ and ‘convert’) installed on your operating system, or this command won’t work. When using pdflatex or xelatex, you must have ‘convert’ installed.
OUTPUT:
If it compiled successfully, this returns an empty string '', otherwise it returns None.
EXAMPLES:
# This would generate a file named "test.png"
sage: latex.eval("\\ZZ[x]", locals(), filename="test") # not tested
''
# This would generate a file named "/path/to/test.png"
sage: latex.eval("\\ZZ[x]", locals(), filename="/path/to/test") # not tested
''
sage: latex.eval("\ThisIsAnInvalidCommand", {}) # optional -- ImageMagick
An error
...
No pages of output.
<BLANKLINE>
String containing extra LaTeX macros to use with %latex, %html, and %mathjax.
INPUT:
If macros is None, return the current string. Otherwise, set it to macros. If you want to append to the string of macros instead of replacing it, use latex.add_macro.
EXAMPLES:
sage: latex.extra_macros("\\newcommand{\\foo}{bar}")
sage: latex.extra_macros()
'\\newcommand{\\foo}{bar}'
sage: latex.extra_macros("")
sage: latex.extra_macros()
''
String containing extra preamble to be used with %latex. Anything in this string won’t be processed by %mathjax.
INPUT:
If s is None, return the current preamble. Otherwise, set it to s. If you want to append to the current extra preamble instead of replacing it, use latex.add_to_preamble.
You will almost certainly need to use this when using the XeLaTeX engine; see below or the documentation for engine() for a suggested preamble.
EXAMPLES:
sage: latex.extra_preamble("\\DeclareMathOperator{\\Ext}{Ext}")
sage: latex.extra_preamble()
'\\DeclareMathOperator{\\Ext}{Ext}'
sage: latex.extra_preamble("\\"+r"usepackage{fontspec,xunicode,xltxtra}\setmainfont[Mapping=tex-text]{UnBatang}\setmonofont[Mapping=tex-text]{UnDotum}")
sage: latex.extra_preamble()
'\\usepackage{fontspec,xunicode,xltxtra}\\setmainfont[Mapping=tex-text]{UnBatang}\\setmonofont[Mapping=tex-text]{UnDotum}'
sage: latex.extra_preamble("")
sage: latex.extra_preamble()
''
INPUT:
Tests whether the local LaTeX installation includes file_name.
EXAMPLES:
sage: latex.has_file("article.cls") # optional - latex
True
sage: latex.has_file("some_inexistent_file.sty")
False
Deprecated. Use mathjax_avoid_list() instead.
EXAMPLES:
sage: latex.jsmath_avoid_list()
doctest:...: DeprecationWarning: Use mathjax_avoid_list instead.
See http://trac.sagemath.org/13508 for details.
[]
List of strings which signal that MathJax should not be used when ‘view’ing.
INPUT:
If L is None, then return the current list. Otherwise, set it to L. If you want to append to the current list instead of replacing it, use latex.add_to_mathjax_avoid_list.
EXAMPLES:
sage: latex.mathjax_avoid_list(["\\mathsf", "pspicture"])
sage: latex.mathjax_avoid_list() # display current setting
['\\mathsf', 'pspicture']
sage: latex.mathjax_avoid_list([]) # reset to default
sage: latex.mathjax_avoid_list()
[]
Change the left and right delimiters for the LaTeX representation of matrices
INPUT:
If both left and right are None, then return the current delimiters. Otherwise, set the left and/or right delimiters, whichever are specified.
Good choices for left and right are any delimiters which LaTeX understands and knows how to resize; some examples are:
Note
Putting aside aesthetics, you may combine these in any way imaginable; for example, you could set left to be a right-hand bracket ‘]’ and right to be a right-hand brace ‘\}’, and it will be typeset correctly.
EXAMPLES:
sage: a = matrix(1, 1, [17])
sage: latex(a)
\left(\begin{array}{r}
17
\end{array}\right)
sage: latex.matrix_delimiters("[", "]")
sage: latex(a)
\left[\begin{array}{r}
17
\end{array}\right]
sage: latex.matrix_delimiters(left="\\{")
sage: latex(a)
\left\{\begin{array}{r}
17
\end{array}\right]
sage: latex.matrix_delimiters()
['\\{', ']']
Restore defaults:
sage: latex.matrix_delimiters("(", ")")
Change the left and right delimiters for the LaTeX representation of vectors
INPUT:
If both left and right are None, then return the current delimiters. Otherwise, set the left and/or right delimiters, whichever are specified.
Good choices for left and right are any delimiters which LaTeX understands and knows how to resize; some examples are:
Note
Putting aside aesthetics, you may combine these in any way imaginable; for example, you could set left to be a right-hand bracket ‘]’ and right to be a right-hand brace ‘\}’, and it will be typeset correctly.
EXAMPLES:
sage: a = vector(QQ, [1,2,3])
sage: latex(a)
\left(1,\,2,\,3\right)
sage: latex.vector_delimiters("[", "]")
sage: latex(a)
\left[1,\,2,\,3\right]
sage: latex.vector_delimiters(right="\\}")
sage: latex(a)
\left[1,\,2,\,3\right\}
sage: latex.vector_delimiters()
['[', '\\}']
Restore defaults:
sage: latex.vector_delimiters("(", ")")
Typeset Sage objects via a __call__ method to this class, typically by calling those objects’ _latex_ methods. The class Latex inherits from this. This class is used in latex_macros, while functions from latex_macros are used in Latex, so this is here primarily to avoid circular imports.
EXAMPLES:
sage: from sage.misc.latex import LatexCall
sage: LatexCall()(ZZ)
\Bold{Z}
sage: LatexCall().__call__(ZZ)
\Bold{Z}
This returns an instance of the class LatexExpr:
sage: type(LatexCall()(ZZ))
<class 'sage.misc.latex.LatexExpr'>
A catalogue of Sage objects with complicated _latex_ methods. Use these for testing latex(), view(), the Typeset button in the notebook, etc.
The classes here only have __init__, _repr_, and _latex_ methods.
EXAMPLES:
sage: from sage.misc.latex import latex_examples
sage: K = latex_examples.knot()
sage: K
LaTeX example for testing display of a knot produced by xypic...
sage: latex(K)
\vtop{\vbox{\xygraph{!{0;/r1.5pc/:}
[u] !{\vloop<(-.005)\khole||\vcrossneg \vunder- }
[] !{\ar @{-}@'{p-(1,0)@+}+(-1,1)}
[ul] !{\vcap[3]>\khole}
[rrr] !{\ar @{-}@'{p-(0,1)@+}-(1,1)}
}}}
Bases: sage.structure.sage_object.SageObject
LaTeX example for testing display of commutative diagrams. See its string representation for details.
EXAMPLES:
sage: from sage.misc.latex import latex_examples
sage: CD = latex_examples.diagram()
sage: CD
LaTeX example for testing display of a commutative diagram...
Bases: sage.structure.sage_object.SageObject
LaTeX example for testing display of graphs. See its string representation for details.
EXAMPLES:
sage: from sage.misc.latex import latex_examples
sage: G = latex_examples.graph()
sage: G
LaTeX example for testing display of graphs...
Bases: sage.structure.sage_object.SageObject
LaTeX example for testing display of knots. See its string representation for details.
EXAMPLES:
sage: from sage.misc.latex import latex_examples
sage: K = latex_examples.knot()
sage: K
LaTeX example for testing display of a knot...
Bases: sage.structure.sage_object.SageObject
LaTeX example for testing display of pstricks output. See its string representation for details.
EXAMPLES:
sage: from sage.misc.latex import latex_examples
sage: PS = latex_examples.pstricks()
sage: PS
LaTeX example for testing display of pstricks...
Bases: str
A class for LaTeX expressions.
Normally, objects of this class are created by a latex() call. It is also possible to generate LatexExpr directly from a string, which must contain valid LaTeX code for typesetting in math mode (without dollar signs). In the Sage notebook, use pretty_print() or the “Typeset” checkbox to actually see the typeset LaTeX code; alternatively, from either the command-line or the notebook, use the view() function.
INPUT:
OUTPUT:
EXAMPLES:
sage: latex(x^20 + 1)
x^{20} + 1
sage: LatexExpr(r"\frac{x^2 + 1}{x - 2}")
\frac{x^2 + 1}{x - 2}
LatexExpr simply converts to string without doing anything extra, it does not call latex():
sage: latex(ZZ)
\Bold{Z}
sage: LatexExpr(ZZ)
Integer Ring
The result of latex() is of type LatexExpr:
sage: L = latex(x^20 + 1)
sage: L
x^{20} + 1
sage: type(L)
<class 'sage.misc.latex.LatexExpr'>
A LatexExpr can be converted to a plain string:
sage: str(latex(x^20 + 1))
'x^{20} + 1'
Render LaTeX input using MathJax. This returns a MathJaxExpr.
EXAMPLES:
sage: from sage.misc.latex import MathJax
sage: MathJax()(3)
<html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: MathJax()(ZZ)
<html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}</script></html>
Render LaTeX input using MathJax. This returns a MathJaxExpr.
INPUT:
OUTPUT:
EXAMPLES:
sage: from sage.misc.latex import MathJax
sage: MathJax().eval(3, mode='display')
<html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: MathJax().eval(3, mode='inline')
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: MathJax().eval(type(3), mode='inline')
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\verb|<type|\phantom{\verb!x!}\verb|'sage.rings.integer.Integer'>|</script></html>
An arbitrary MathJax expression that can be nicely concatenated.
EXAMPLES:
sage: from sage.misc.latex import MathJaxExpr
sage: MathJaxExpr("a^{2}") + MathJaxExpr("x^{-1}")
a^{2}x^{-1}
Returns the LaTeX code for None.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import None_function
sage: print None_function(None)
\mathrm{None}
Returns the LaTeX code for a boolean x.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import bool_function
sage: print bool_function(2==3)
\mathrm{False}
sage: print bool_function(3==(2+1))
\mathrm{True}
Returns the LaTeX code for a builtin constant x.
INPUT:
See also
Python built-in Constants http://docs.python.org/library/constants.html
EXAMPLES:
sage: from sage.misc.latex import builtin_constant_function
sage: builtin_constant_function(True)
'\\mbox{\\rm True}'
sage: builtin_constant_function(None)
'\\mbox{\\rm None}'
sage: builtin_constant_function(NotImplemented)
'\\mbox{\\rm NotImplemented}'
sage: builtin_constant_function(Ellipsis)
'\\mbox{\\rm Ellipsis}'
TESTS:
sage: sage.misc.latex.EMBEDDED_MODE = True
sage: builtin_constant_function(True)
'{\\rm True}'
sage: sage.misc.latex.EMBEDDED_MODE = False
LaTeX string representing coefficients in a linear combination.
INPUT:
OUTPUT:
A string
EXAMPLES:
sage: from sage.misc.latex import coeff_repr
sage: coeff_repr(QQ(1/2))
'\\frac{1}{2}'
sage: coeff_repr(-x^2)
'\\left(-x^{2}\\right)'
Returns the LaTeX code for a dictionary x.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import dict_function
sage: x,y,z = var('x,y,z')
sage: print dict_function({x/2: y^2})
\left\{\frac{1}{2} \, x : y^{2}\right\}
sage: d = {(1,2,x^2): [sin(z^2), y/2]}
sage: latex(d)
\left\{\left(1, 2, x^{2}\right) :
\left[\sin\left(z^{2}\right), \frac{1}{2} \, y\right]\right\}
Returns the LaTeX code for a python float x.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import float_function
sage: float_function(float(3.14))
3.14
sage: float_function(float(1e-10))
1 \times 10^{-10}
sage: float_function(float(2e10))
20000000000.0
TESTS:
Check that trac ticket #7356 is fixed:
sage: latex(float(2e-13))
2 \times 10^{-13}
Return True if x has a _latex_ attribute, except if x is a type, in which case return False.
EXAMPLES:
sage: from sage.misc.latex import has_latex_attr
sage: has_latex_attr(identity_matrix(3))
True
sage: has_latex_attr("abc") # strings have no _latex_ method
False
Types inherit the _latex_ method of the class to which they refer, but calling it is broken:
sage: T = type(identity_matrix(3)); T
<type 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
sage: hasattr(T, '_latex_')
True
sage: T._latex_()
Traceback (most recent call last):
...
TypeError: descriptor '_latex_' of 'sage.matrix.matrix0.Matrix' object needs an argument
sage: has_latex_attr(T)
False
Return True if this computer has the program convert.
If this computer doesn’t have convert installed, you may obtain it (along with the rest of the ImageMagick suite) from http://www.imagemagick.org
EXAMPLES:
sage: from sage.misc.latex import have_convert
sage: have_convert() # random
True
Return True if this computer has the program dvipng.
If this computer doesn’t have dvipng installed, you may obtain it from http://sourceforge.net/projects/dvipng/
EXAMPLES:
sage: from sage.misc.latex import have_dvipng
sage: have_dvipng() # random
True
Return True if this computer has the program latex.
If this computer doesn’t have LaTeX installed, you may obtain it from http://ctan.org/.
EXAMPLES:
sage: from sage.misc.latex import have_latex
sage: have_latex() # random
True
Return True if this computer has the program pdflatex.
If this computer doesn’t have pdflatex installed, you may obtain it from http://ctan.org/.
EXAMPLES:
sage: from sage.misc.latex import have_pdflatex
sage: have_pdflatex() # random
True
Return True if this computer has the program xelatex.
If this computer doesn’t have xelatex installed, you may obtain it from http://ctan.org/.
EXAMPLES:
sage: from sage.misc.latex import have_xelatex
sage: have_xelatex() # random
True
Return a LatexExpr built out of the argument x.
INPUT:
OUTPUT:
A LatexExpr built from x
EXAMPLES:
sage: latex(Integer(3)) # indirect doctest
3
sage: latex(1==0)
\mathrm{False}
sage: print latex([x,2])
\left[x, 2\right]
Check that trac ticket #11775 is fixed:
sage: latex((x,2), combine_all=True)
x 2
Return the string containing the user-configured preamble, sage_latex_macros, and any user-configured macros. This is used in the eval() method for the Latex class, and in _latex_file_(); it follows either LATEX_HEADER or SLIDE_HEADER (defined at the top of this file) which is a string containing the documentclass and standard usepackage commands.
EXAMPLES:
sage: from sage.misc.latex import latex_extra_preamble
sage: print latex_extra_preamble()
...
\newcommand{\ZZ}{\Bold{Z}}
\newcommand{\NN}{\Bold{N}}
\newcommand{\RR}{\Bold{R}}
\newcommand{\CC}{\Bold{C}}
\newcommand{\QQ}{\Bold{Q}}
\newcommand{\QQbar}{\overline{\QQ}}
\newcommand{\GF}[1]{\Bold{F}_{#1}}
\newcommand{\Zp}[1]{\ZZ_{#1}}
\newcommand{\Qp}[1]{\QQ_{#1}}
\newcommand{\Zmod}[1]{\ZZ/#1\ZZ}
\newcommand{\CDF}{\Bold{C}}
\newcommand{\CIF}{\Bold{C}}
\newcommand{\CLF}{\Bold{C}}
\newcommand{\RDF}{\Bold{R}}
\newcommand{\RIF}{\Bold{I} \Bold{R}}
\newcommand{\RLF}{\Bold{R}}
\newcommand{\CFF}{\Bold{CFF}}
\newcommand{\Bold}[1]{\mathbf{#1}}
Return latex version of a variable name.
Here are some guiding principles for usage of this function:
Refer to the examples section for how these rules might play out in practice.
EXAMPLES:
sage: from sage.misc.latex import latex_variable_name
sage: latex_variable_name('a')
'a'
sage: latex_variable_name('abc')
'\\mbox{abc}'
sage: latex_variable_name('sigma')
'\\sigma'
sage: latex_variable_name('sigma_k')
'\\sigma_{k}'
sage: latex_variable_name('sigma389')
'\\sigma_{389}'
sage: latex_variable_name('beta_00')
'\\beta_{00}'
sage: latex_variable_name('Omega84')
'\\Omega_{84}'
sage: latex_variable_name('sigma_alpha')
'\\sigma_{\\alpha}'
sage: latex_variable_name('nothing1')
'\\mbox{nothing}_{1}'
sage: latex_variable_name('nothing1', is_fname=True)
'{\\rm nothing}_{1}'
sage: latex_variable_name('nothing_abc')
'\\mbox{nothing}_{\\mbox{abc}}'
sage: latex_variable_name('nothing_abc', is_fname=True)
'{\\rm nothing}_{{\\rm abc}}'
sage: latex_variable_name('alpha_beta_gamma12')
'\\alpha_{\\beta_{\\gamma_{12}}}'
AUTHORS:
Convert a string a to a LaTeX string: if it’s an element of common_varnames, then prepend a backslash. If a consists of a single letter, then return it. Otherwise, return either “{\rm a}” or “\mbox{a}” if “is_fname” flag is True or False.
INPUT:
OUTPUT:
A string
EXAMPLES:
sage: from sage.misc.latex import latex_varify
sage: latex_varify('w')
'w'
sage: latex_varify('aleph')
'\\mbox{aleph}'
sage: latex_varify('aleph', is_fname=True)
'{\\rm aleph}'
sage: latex_varify('alpha')
'\\alpha'
Returns the LaTeX code for a list x.
INPUT: x - a list
EXAMPLES:
sage: from sage.misc.latex import list_function
sage: list_function([1,2,3])
'\\left[1, 2, 3\\right]'
sage: latex([1,2,3]) # indirect doctest
\left[1, 2, 3\right]
sage: latex([Matrix(ZZ,3,range(9)), Matrix(ZZ,3,range(9))]) # indirect doctest
\left[\left(\begin{array}{rrr}
0 & 1 & 2 \\
3 & 4 & 5 \\
6 & 7 & 8
\end{array}\right), \left(\begin{array}{rrr}
0 & 1 & 2 \\
3 & 4 & 5 \\
6 & 7 & 8
\end{array}\right)\right]
Create a png image representation of x and save to the given filename.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import png
sage: png(ZZ[x], os.path.join(SAGE_TMP, "zz.png")) # random - error if no latex
Try to pretty print the arguments in an intelligent way. For graphics objects, this returns their default representation. For other objects, in the notebook, this calls the view() command, while from the command line, this produces an html string suitable for processing by MathJax.
INPUT:
This function is used in the notebook when the “Typeset” button is checked.
EXAMPLES:
sage: pretty_print(ZZ) # indirect doctest
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}</script></html>
sage: pretty_print("Integers = ", ZZ) # trac 11775
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\verb|Integers|\phantom{\verb!x!}\verb|=| \Bold{Z}</script></html>
To typeset LaTeX code as-is, use LatexExpr:
sage: pretty_print(LatexExpr(r"\frac{x^2 + 1}{x - 2}"))
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\frac{x^2 + 1}{x - 2}</script></html>
Enable or disable default pretty printing. Pretty printing means rendering things so that MathJax or some other latex-aware front end can render real math.
This function is pretty useless without the notebook, it shoudn’t be in the global namespace.
INPUT:
EXAMPLES:
sage: pretty_print_default(True)
sage: 'foo'
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}\verb|foo|</script></html>
sage: pretty_print_default(False)
sage: 'foo'
'foo'
‘view’ or ‘print’ the object depending on the situation.
In particular, if in notebook mode with the typeset box checked, view the object. Otherwise, print the object.
INPUT:
EXAMPLES:
sage: sage.misc.latex.print_or_typeset(3)
3
sage: sage.misc.latex.EMBEDDED_MODE=True
sage: sage.misc.latex.print_or_typeset(3)
3
sage: TEMP = sys.displayhook
sage: sys.displayhook = sage.misc.latex.pretty_print
sage: sage.misc.latex.print_or_typeset(3)
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: sage.misc.latex.EMBEDDED_MODE=False
sage: sys.displayhook = TEMP
Compute a latex representation of a linear combination of some formal symbols.
INPUT:
OUTPUT:
A string
EXAMPLES:
sage: t = PolynomialRing(QQ, 't').0
sage: from sage.misc.latex import repr_lincomb
sage: repr_lincomb(['a', 's', ''], [-t, t - 2, t^12 + 2])
'-t\\text{\\texttt{a}} + \\left(t - 2\\right)\\text{\\texttt{s}} + \\left(t^{12} + 2\\right)'
sage: repr_lincomb(['a', 'b'], [1,1])
'\\text{\\texttt{a}} + \\text{\\texttt{b}}'
Verify that a certain corner case works (see trac ticket #5707 and trac ticket #5766):
sage: repr_lincomb([1,5,-3],[2,8/9,7])
'2\\cdot 1 + \\frac{8}{9}\\cdot 5 + 7\\cdot -3'
Return a LaTeX representation of the string x.
The main purpose of this function is to generate LaTeX representation for classes that do not provide a customized method.
If x contains only digits with, possibly, a single decimal point and/or a sign in front, it is considered to be its own representation. Otherwise each line of x is wrapped in a \verb command and these lines are assembled in a left-justified array. This gives to complicated strings the closest look to their “terminal representation”.
Warning
Such wrappers cannot be used as arguments of LaTeX commands or in command definitions. If this causes you any problems, they probably can be solved by implementing a suitable _latex_ method for an appropriate class.
INPUT:
OUTPUT:
A string
EXAMPLES:
sage: from sage.misc.latex import str_function
sage: str_function('34')
'34'
sage: str_function('34.5')
'34.5'
sage: str_function('-34.5')
'-34.5'
sage: str_function('+34.5')
'+34.5'
sage: str_function('hello_world')
'\\text{\\texttt{hello{\\char`\\_}world}}'
sage: str_function('-1.00000?') # trac 12178
'-1.00000?'
Returns the LaTeX code for a tuple x.
INPUT:
EXAMPLES:
sage: from sage.misc.latex import tuple_function
sage: tuple_function((1,2,3))
'\\left(1, 2, 3\\right)'
Check that trac ticket #11775 is fixed:
sage: tuple_function((1,2,3), combine_all=True)
'1 2 3'
sage: tuple_function(((1,2),3), combine_all=True)
'\\left(1, 2\\right) 3'
Compute a latex representation of each object in objects, compile, and display typeset. If used from the command line, this requires that latex be installed.
INPUT:
OUTPUT:
Display typeset objects.
This function behaves differently depending on whether in notebook mode or not.
If not in notebook mode, the output is displayed in a separate viewer displaying a dvi (or pdf) file, with the following: the title string is printed, centered, at the top. Beneath that, each object in objects is typeset on its own line, with the string sep inserted between these lines.
The value of sep is inserted between each element of the list objects; you can, for example, add vertical space between objects with sep='\\vspace{15mm}', while sep='\\hrule' adds a horizontal line between objects, and sep='\\newpage' inserts a page break between objects.
If pdflatex is True, then the latex engine is set to pdflatex.
If the engine is either pdflatex or xelatex, it produces a pdf file. Otherwise, it produces a dvi file, and if the program dvipng is installed, it checks the dvi file by trying to convert it to a png file. If this conversion fails, the dvi file probably contains some postscript special commands or it has other issues which might make displaying it a problem; in this case, the file is converted to a pdf file, which is then displayed.
Setting viewer to 'pdf' forces the use of a separate viewer, even in notebook mode. This also sets the latex engine to be pdflatex if the current engine is latex.
Setting the option tightpage to True tells LaTeX to use the package ‘preview’ with the ‘tightpage’ option. Then, each object is typeset in its own page, and that page is cropped to exactly the size of the object. This is typically useful for very large pictures (like graphs) generated with tikz. This only works when using a separate viewer. Note that the object are currently typeset in plain math mode rather than displaymath, because the latter imposes a limit on the width of the picture. Technically, tightpage adds
\\usepackage[tightpage,active]{preview}
\\PreviewEnvironment{page}
to the LaTeX preamble, and replaces the \\[ and \\] around each object by \\begin{page}$ and $\\end{page}.
If in notebook mode with viewer equal to None, this usually uses MathJax – see the next paragraph for the exception – to display the output in the notebook. Only the first argument, objects, is relevant; the others are ignored. If objects is a list, each object is printed on its own line.
In the notebook, this does not use MathJax if the LaTeX code for objects contains a string in latex.mathjax_avoid_list(). In this case, it creates and displays a png file.
EXAMPLES:
sage: sage.misc.latex.EMBEDDED_MODE = True
sage: view(3)
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: view(3, mode='display')
<html><script type="math/tex; mode=display">\newcommand{\Bold}[1]{\mathbf{#1}}3</script></html>
sage: view((x,2), combine_all=True) # trac 11775
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}x 2</script></html>
sage: sage.misc.latex.EMBEDDED_MODE = False
TESTS:
sage: from sage.misc.latex import _run_latex_, _latex_file_
sage: g = sage.misc.latex.latex_examples.graph()
sage: latex.add_to_preamble(r"\usepackage{tkz-graph}")
sage: file = os.path.join(SAGE_TMP, "temp.tex")
sage: O = open(file, 'w'); O.write(_latex_file_(g)); O.close()
sage: _run_latex_(file, engine="pdflatex") # optional - latex
'pdf'
sage: latex.extra_preamble('') # reset the preamble
sage: view(4, engine="garbage")
Traceback (most recent call last):
...
ValueError: Unsupported LaTeX engine.
sage: sage.misc.latex.EMBEDDED_MODE = True
sage: view(4, engine="garbage", viewer="pdf")
Traceback (most recent call last):
...
ValueError: Unsupported LaTeX engine.