[tex4ht] [bug #371] TikZ externalization and PDF images

Nasser M. Abbasi nma at 12000.org
Tue Oct 17 23:26:30 CEST 2017


On 10/16/2017 7:52 AM, Michal Hoftich wrote:
> URL:
>    <http://puszcza.gnu.org.ua/bugs/?371>
> 
>                   Summary: TikZ externalization and PDF images
>                   Project: tex4ht
>              Submitted by: michal_h21
>              Submitted on: Mon 16 Oct 2017 03:52:24 PM EEST
>                  Category: None
>                  Priority: 5 - Normal
>                  Severity: 5 - Normal
>                    Status: None
>                   Privacy: Public
>               Assigned to: None
>          Originator Email:
>               Open/Closed: Open
>           Discussion Lock: Any
> 
>      _______________________________________________________
> 
> Details:
> 
> I've added support for TikZ externalization and for PDF image inclusion.
> 
> The externalization supports means that TikZ will not try to externalize the
> images with tex4ht compilation, saved images will be used instead. So it is
> necessary to compile the document using (pdf|lua|xe)latex first, with
> -shell-escape option. The externalized images will be included as PDF.
> 
> This is connected with the second new feature, which is PDF image support. PDF
> images will be converted to some supported format, I've added support for SVG
> support as default. Inkscape is used for the conversion. New configuration,
> PdfConvert have been added. It has two arguments, first is the image format
> which should be used, the second is a command used for conversion.
> 
> This is the default configuration:
> 
> \Configure{PdfConvert}{svg}{"inkscape -z -f '\Gin at base.pdf' -l
> '\Gin at base.\a:PdfConvert'"}
> 
> I think we can add more configurations and use the command line options for
> choosing among them.
> 
> The main reason to use the externalization instead of the default TikZ support
> for tex4ht, is that it has better support for text nodes  and more TikZ
> features. And also the compilation speed should be better.
> 

Thank you Michal for all of this. I am trying to test
this, but keep getting an error with the .cfg

It might be useful to make a template complete .cfg file for
users to use? Or a small example folder with the
commands you used and put them in zip file to download
and use them as reference?

I put the command you show in my .cfg, but I must be doing
something wrong. I keep getting this error:

=================================
make4ht --shell-escape --lua -u -c nma.cfg document.tex

(/usr/local/texlive/2017/texmf-dist/tex/generic/tex4ht/html4-math.4ht))
l.13 --- TeX4ht warning --- \Configure{PdfConvert}? ---

! LaTeX Error: Missing \begin{document} in `nma.cfg'.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
  ...
                                                   
l.13 \Configure{PdfConvert}{s
                            vg}{"inkscape -z -f '\Gin at base.pdf' -l '\Gin at base...

? x

=================================

Is it in wrong place?

Here is the .cfg I am using. Do I need to keep all the
other configuration in there I had from before? I tried
removing them, but the error still there.

=== nma.cfg========
\Preamble{xhtml,p-width}
\DeclareGraphicsExtensions{.svg,.png}
\Configure{Picture}{.svg}
%this below to make it resize the SVG image, if it is there, to
%what is in the includegraphics.
%thanks to @Michael.h21 for this trick
\makeatletter
\newcommand\emwidth{10}
\newcommand\CalcRem[1]{\strip at pt\dimexpr(#1)/\emwidth}

\Configure{graphics*}
            {svg}
             {\Picture[pict]{\csname Gin at base\endcsname.svg
             \space style="width:\CalcRem{\Gin at req@width}em;"
             }%
             \special{t4ht+ at File: \csname Gin at base\endcsname.svg}
            }
            
%added this on oct 17,2017. Per email from  @Michael.h21
\Configure{PdfConvert}{svg}{"inkscape -z -f '\Gin at base.pdf' -l '\Gin at base.\a:PdfConvert'"}
            
\makeatother
\begin{document}
\EndPreamble
== end nma.cfg ==============

Here is the small latex file I am trying to test with

=== document.tex====
\documentclass[11pt]{article}
\usepackage{ifluatex}
\ifluatex
   \usepackage{shellesc}
   \IfFileExists{luatex85.sty}{\usepackage{luatex85}}{}
   \ifdefined\HCode
     \usepackage[utf8]{luainputenc}
   \else
\fi

\usepackage{tikz}
\usepackage{pgffor}
\usepackage{graphicx}

\begin{document}
\pdfximage{foo.pdf}

\foreach \n in {1,...,\the\pdflastximagepages} %loop over each page
{
   \fbox{
     \includegraphics[width=0.95\textwidth,page=\n]{foo}
   }
  
}
\end{document}
=========================

Just need to put some PDF file to test with.
It compiles OK with lualtex. But gives the above error with
make4ht. I think I have syntax error in my .cfg file?

Running on Linux, latest texlive update.

>which inkscape
/usr/bin/inkscape

>inkscape --version
Inkscape 0.91 r13725

Thank you
--Nasser




More information about the tex4ht mailing list