svg не будет отображать текст, содержащий теги g - PullRequest
0 голосов
/ 29 марта 2020

Я сократил свою проблему до минимального рабочего примера. Этот фрагмент кода не будет отображать текст:

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> 
<svg viewBox="-361.65944 -228.02199 723.31888 284.92749 ">
    <text > 
        <g fill="#000">
            <g stroke="none">
                <tspan font-family="cmr" font-size="17">Render</tspan>
                <tspan font-family="cmr" font-size="17">Process</tspan>
            </g>
        </g>
    </text> 
</svg>

Теперь, если я закомментирую два тега g, будет показан текст:

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> 
<svg viewBox="-361.65944 -228.02199 723.31888 284.92749 ">
    <text > 
        <!-- <g fill="#000"> -->
            <!-- <g stroke="none"> -->
                <tspan font-family="cmr" font-size="17">Render</tspan>
                <tspan font-family="cmr" font-size="17">Process</tspan>
            <!-- </g> -->
        <!-- </g> -->
    </text> 
</svg>

Почему это происходит? Я генерирую svg через htlatex из следующего документа tikz:

\documentclass[tikz]{standalone}
\def\pgfsysdriver{pgfsys-tex4ht.def} 

\usepackage{tikz}
\usepackage{anyfontsize}
\usetikzlibrary{shapes, positioning}
\begin{document}
\begin{tikzpicture}[
    main/.style={rounded corners, fill=blue!15, align=center, inner sep=10, text width=6cm, minimum height=4cm, font={\fontsize{50 pt}{40 pt}\selectfont}},
    render/.style={rounded corners, fill=red!15, align=center, inner sep=6, text width=5cm, minimum height=3.5cm, font={\fontsize{40 pt}{40 pt}\selectfont}},
]
    \node[main] (main) {Main Process};
    \node[render] [below=of main, xshift=10cm, yshift=-1.5cm] (render1) {Render Process};
    \node[render] [below=of main, xshift=3.2cm, yshift=-1.5cm] (render2) {Render Process};
    \node[render] [below=of main, xshift=-3.2cm, yshift=-1.5cm] (render3) {...};
    \node[render] [below=of main, xshift=-10cm, yshift=-1.5cm] (render4) {Render Process};

    \draw [->] (main) -- (render1.north);
    \draw [->] (main) -- (render2.north);
    \draw [->] (main) -- (render3.north);
    \draw [->] (main) -- (render4.north);
\end{tikzpicture}
\end{document}

Понятия не имею, что здесь происходит. Буду очень признателен за любой вклад!

1 Ответ

0 голосов
/ 29 марта 2020

htlatex - не лучший инструмент для создания файла SVG из файла латекса. pdf2svg работает лучше. Чтобы преобразовать ваш tex файл в svg:

  1. Скомпилируйте ваш латекс в pdf, используя, например, latexmk -pdf main.tex
  2. Преобразование выходного pdf в svg, используя pdf2svg: pdf2svg main.pdf main.svg

Полученный svg не будет содержать ошибок, которые вы обнаружите, используя htlatex main.tex для получения svg

...