
Estoy buscando una forma confiable de convertir un pdf de un archivo latex a SVG para mostrarlo en un navegador.
\documentclass{article}
\pagenumbering{gobble}
\usepackage{blkarray}
\usepackage{xcolor}
\definecolor{darkred}{rgb}{0.55, 0.0, 0.0}
% -----------------------------------------------------------------------------------------------
\begin{document}
\begin{blockarray}{rrrrrrrrrr}
\begin{block}{rrrr(cccc|c)!{\quad}l}
& & & & 1 & 2 & 2 & 1 & 8 & the pivot is in row 2, col 2\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{$\boxed{1}$}}} & -1 & 0 & 0 & It will be multiplied by\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{-2}}} & 1 & -2 & -5 & entries in column 1 of $E$ \\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{\ 1}}} & -1 & 1 & 2 & \\
\end{block}
\end{blockarray}
\end{document}
- Había usado
\documentclass{standalone}
algo que no funcionó. Terminé eliminando el número de página y usando el siguiente shellscript feo.
!/bin/sh
latexmk -pdflatex $1.tex && \
latexmk -pdflatex -c $1.tex && \
pdf2svg $1.pdf /tmp/temp_$1.svg && \
inkscape -D --without-gui --file=/tmp/temp_$1.svg --export-plain-svg $1.svg
Preguntas
- ¿Existe una forma más sencilla de crear el svg para que la imagen se recorte en la medida real? (la opción -D para Inkscape)
- ¿Existe una forma más sencilla de crear el pdf para que solo muestre esa imagen, en lugar de toda la página?
- Los paréntesis que encierran la matriz se estropean en la mayoría de mis intentos. ¿Qué tendría que hacer para garantizar que los pares se representen correctamente?
- ¿Cualquier solución puede usar xelatex en lugar de pdflatex?
Respuesta1
En lugar de pdf2svg
, que no se mantiene, usaría dvisvgm
el que forma parte de TeXLive/MiKTeX y se mantiene activamente.
La combinación --exact
y --zoom=-1
recorta la salida al contenido visible y la hace responsiva, lo que facilita la incrustación en HTML (opciones explicadasaquí).
latex input
dvisvgm --exact --zoom=-1 --font-format=woff2 input
\documentclass{article}
\pagestyle{empty}
\usepackage{nicematrix}
\usepackage{blkarray}
\usepackage{xcolor}
\definecolor{darkred}{rgb}{0.55, 0.0, 0.0}
% -----------------------------------------------------------------------------------------------
\begin{document}
\begin{blockarray}{rrrrrrrrrr}
\begin{block}{rrrr(cccc|c)!{\quad}l}
& & & & 1 & 2 & 2 & 1 & 8 & the pivot is in row 2, col 2\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{$\boxed{1}$}}} & -1 & 0 & 0 & It will be multiplied by\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{-2}}} & 1 & -2 & -5 & entries in column 1 of $E$ \\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{\ 1}}} & -1 & 1 & 2 & \\
\end{block}
\end{blockarray}
\end{document}
Respuesta2
Sólo agrega lo que falta amsmath
.
\documentclass{standalone}
\usepackage{amsmath}
\usepackage{blkarray}
\usepackage{xcolor}
\definecolor{darkred}{rgb}{0.55, 0.0, 0.0}
% -----------------------------------------------------------------------------------------------
\begin{document}
\begin{blockarray}{rrrrrrrrrr}
\begin{block}{rrrr(cccc|c)!{\quad}l}
& & & & 1 & 2 & 2 & 1 & 8 & the pivot is in row 2, col 2\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{$\boxed{1}$}}} & -1 & 0 & 0 & It will be multiplied by\\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{-2}}} & 1 & -2 & -5 & entries in column 1 of $E$ \\
& & & & 0 & {\colorbox{yellow}{\color{darkred}{\ 1}}} & -1 & 1 & 2 & \\
\end{block}
\end{blockarray}
\end{document}
Luego compila y convierte de PDF a SVG como sugeriste.
#!/bin/bash
latexmk -pdflatex $1.tex && \
latexmk -pdflatex -c $1.tex && \
pdf2svg $1.pdf $1.svg
Respuesta3
Cada una de las cadenas de herramientas falla en diversas circunstancias, según el motor de látex, la clase de documento y los paquetes utilizados.
Estoy agregando una versión actual (python/linux) de una función que crea la cadena de herramientas tex_program -> svg_converter -> svg_crop
como una lista de parámetros de comando que se pueden usar en una llamada de Python para ejecutar un subproceso. No el nexec
parámetro es el número de veces tex_program
que se invocará. No es aplicable para todas las combinaciones...
def build_commands( tex_program=["pdflatex"], svg_converter=[["pdf2svg"],".pdf"], use_xetex=False, use_dvi=False, crop=False, nexec=1):
if isinstance( tex_program, (list,)) is False:
tex_program = [tex_program]
if tex_program[0] == "pdflatex":
if use_xetex is True:
if use_dvi is True:
if nexec > 1:
_tex_program = ["xelatex", "--no-pdf", "-etex" ]
_svg_converter = [["dvisvgm", "--font-format=woff2", "--exact"], ".xdv"]
else:
_tex_program = ["latexmk", "-xelatex", "-etex" ]
_svg_converter = [["dvisvgm", "--font-format=woff2", "--exact"], ".xdv"]
else:
if nexec > 1:
_tex_program = ["xelatex", "-etex" ]
_svg_converter = [["pdf2svg"], ".pdf"]
else:
_tex_program = ["latexmk", "-xelatex", "-etex" ]
_svg_converter = [["pdf2svg"], ".pdf"]
else:
if use_dvi is True:
_tex_program = ["latexmk", "-etex", "-dvi" ]
_svg_converter = [["dvisvgm", "--font-format=woff2", "--exact"], ".dvi"]
else:
_tex_program = ["latexmk", "-etex", "-pdf" ]
_svg_converter = [["pdf2svg"], ".pdf"]
else:
_tex_program = tex_program
_svg_converter = svg_converter
if crop:
_svg_crop = (["inkscape", "-D", "--without-gui", "--file"], ["--export-plain-svg"])
else:
_svg_crop = None
return _tex_program, _svg_converter,_svg_crop
Para invocar los programas, uso código como el siguiente
tex_program.append( tex_path )
for _ in range(nexec-1):
run_subprocess(tex_program, cwd=working_dir)
check_output(tex_program, cwd=working_dir)
svg_program = svg_converter[0] + [pdf_path, svg_path]
check_output(svg_program, cwd=working_dir)
if svg_crop is not None:
crop_program = svg_crop[0] + [svg_path] + svg_crop[1] + [svg_path]
check_output( crop_program, cwd=working_dir)