
Ich suche nach einer zuverlässigen Möglichkeit, ein PDF aus einer Latex-Datei in SVG zu konvertieren, um es in einem Browser anzuzeigen
\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}
- Ich hatte verwendet
\documentclass{standalone}
, was nicht funktionierte. Ich habe am Ende die Seitennummer entfernt und das folgende hässliche Shellscript verwendet
!/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
Fragen
- Gibt es eine einfachere Möglichkeit, das SVG so zu erstellen, dass das Bild auf die tatsächliche Größe zugeschnitten wird? (die Option -D für Inkscape)
- Gibt es eine einfachere Möglichkeit, das PDF so zu erstellen, dass nur das Bild und nicht die ganze Seite angezeigt wird?
- Die Klammern, die die Matrix umschließen, geraten bei den meisten meiner Versuche durcheinander. Was muss ich tun, um sicherzustellen, dass die Klammern korrekt wiedergegeben werden?
- Kann eine beliebige Lösung Xelatex anstelle von PDFlatex verwenden?
Antwort1
Anstelle von pdf2svg
, das nicht gepflegt wird, würde ich verwenden, dvisvgm
das Teil von TeXLive/MiKTeX ist und aktiv gepflegt wird.
Die Kombination aus --exact
und --zoom=-1
reduziert die Ausgabe auf den sichtbaren Inhalt und macht sie responsiv, was die Einbettung in HTML erleichtert (Optionen erklärtHier).
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}
Antwort2
Fügen Sie einfach die fehlenden hinzu 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}
Kompilieren und konvertieren Sie dann wie vorgeschlagen von PDF in SVG.
#!/bin/bash
latexmk -pdflatex $1.tex && \
latexmk -pdflatex -c $1.tex && \
pdf2svg $1.pdf $1.svg
Antwort3
Jede der Toolchains schlägt unter unterschiedlichen Umständen fehl, abhängig von der Latex-Engine, der Dokumentklasse und den verwendeten Paketen.
Ich füge eine aktuelle (Python/Linux) Version einer Funktion hinzu, die die Toolchain tex_program -> svg_converter -> svg_crop
als Liste von Befehlsparametern erstellt, die in einem Python-Aufruf verwendet werden können, um einen Unterprozess auszuführen. Der nexec
Parameter gibt nicht an, wie oft er tex_program
aufgerufen wird. Er ist nicht für alle Kombinationen anwendbar...
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
Um die Programme aufzurufen, verwende ich Code in etwa wie folgt
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)