Конвертировать PGFplot в html?

Конвертировать PGFplot в html?

Я хотел бы преобразовать простой фрагмент кода LaTeX, который в основном представляет собой текст с несколькими центрированными графиками между ними. Это фиктивная версия кода, который я хотел бы преобразовать в HTML:

\documentclass{article}
\usepackage{lmodern}
\usepackage{pgfplots}
\usepackage{lipsum}
\pgfplotsset{compat=1.9}

\begin{document}
\lipsum
\begin{center}
    \begin{tikzpicture}
        \begin{axis}[
            ybar stacked,
            ymin=0, ymax=35,
            width=9cm,
            height=6cm,
            symbolic x coords={Zimbabwe, France, Italy, Kenya, Germany},
            xtick=data,
            bar width=15pt,
            axis lines*=left,
            ytick={0,5,...,35},
            xticklabel style={
                text height=1.5ex,font=\footnotesize
            },
            yticklabel style={
                font=\footnotesize
            },
            ymajorgrids,
            xlabel={ ... ... ... ... ... , 2004-2009},
            xlabel style={yshift=5.8cm,xshift=.9cm},
            ]
            \addplot[fill=gray!50] coordinates {
                (Zimbabwe,16)
                (France,30)
                (Italy,10)
                (Kenya,5)
                (Germany,20)
            };
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

Мне надоел latex4ht, который я использовал в прошлом, но, похоже, он не работает с кодом PGFplot.

Итак, мой вопрос: как конвертировать графики PGFplot в html? Спасибо за помощь

решение1

Существует множество способов получить графику html и svg с помощью tikzи tex4ht. По моему мнению, лучший способ — использовать tikz externalizationбиблиотеку для выполнения преобразования. С помощью этой библиотеки pdfдля каждой картинки создается отдельное изображение tikz, а затем можно использовать внешнюю команду для преобразования этого pdfизображения в svg. Я добился большого успеха в inkscapeвыполнении этой работы, с другими приложениями, например, imagemagickя обнаружил некоторые проблемы, и результат был неверным. Поэтому вам нужно установить его, inkscapeчтобы это заработало.

Сначала создадим пакет, который установит externalizationдля нас myexternalize.sty:

\usetikzlibrary{external}
\tikzset{
    tex4ht inc/.style={
        /pgf/images/include external/.code={%
            \includegraphics[]{##1.svg}%
        }

    }
}

\tikzset{
 external/system call/.add={}                                                
      {; inkscape -z -f "\image.pdf" -l "\image.svg"
            }    
}
\@ifpackageloaded{tex4ht}{
    \tikzexternalize[mode=only graphics]
    \tikzset{tex4ht inc}
}{
    \tikzexternalize
}

Этот пакет создает новый tikzстиль, tex4ht inc, который будет использоваться с tex4ht. С pdflatex, pdfфайл экспортируется и inscapeвызывается в режиме командной строки для преобразования этого pdfизображения в svg.

Теперь нам нужна некоторая конфигурация для tex4htтого, чтобы иметь возможность включать svgизображения, файл myexternalize.4ht:

\Configure{graphics*}  
         {svg}{  
          {\Configure{Needs}{File: \[email protected]}\Needs{}}
          \Picture[\csname a:GraphicsAlt\endcsname]{\csname Gin@base\endcsname.svg \csname a:Gin-dim\endcsname}%  
         }  

Теперь вы можете включить myexternalizeпакет в свой документ:

\documentclass{article}
\usepackage{lmodern}
\usepackage{pgfplots}
\usepackage{lipsum}
\pgfplotsset{compat=1.9}
\usepackage{myexternalize}
....

а затем скомпилируйте документ с помощью

pdflatex -shell-escape documentname

для получения svgфайлов. -shell-escapeопция важна, иначе преобразование не сработает! теперь вы можете скомпилировать файл в html:

htlatex documentname

вы можете увидеть результатздесь

Связанный контент