diff options
author | Karl Berry <karl@freefriends.org> | 2020-08-18 21:13:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-08-18 21:13:53 +0000 |
commit | 5272405de15717605a7528fa4842f475535ba2b6 (patch) | |
tree | fd71eb01e86e6e1e73d65a73eaf125cfc91c155d /Master/texmf-dist/source/support | |
parent | 47249c75088d386d0981b666954c3e88010df3ac (diff) |
ltximg (18aug20)
git-svn-id: svn://tug.org/texlive/trunk@56129 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/support')
-rw-r--r-- | Master/texmf-dist/source/support/ltximg/ltximg-doc.dtx | 1705 |
1 files changed, 0 insertions, 1705 deletions
diff --git a/Master/texmf-dist/source/support/ltximg/ltximg-doc.dtx b/Master/texmf-dist/source/support/ltximg/ltximg-doc.dtx deleted file mode 100644 index b703faf7ec5..00000000000 --- a/Master/texmf-dist/source/support/ltximg/ltximg-doc.dtx +++ /dev/null @@ -1,1705 +0,0 @@ -% arara: xelatex -% arara: xelatex -% arara: clean: { extensions: [ aux, log, out, ilg, ind, idx, toc, hd ] } -% \iffalse meta-comment -%<*internal> -\iffalse -%</internal> -%<*readme> -## LTXimg – LaTeX environments to image format - -## Description - -**ltximg** is a perl *script* that automates the process of extracting and converting -environments provided by **tikz**, **pstricks** and other packages from input file -to image formats in individual files using `ghostscript` and `poppler-utils`. Generates a file -with only extracted environments and other with environments converted to `\includegraphics`. - -## Syntax -```bash -$ ltximg [<compiler>] [<options>] [--] <input file>.<tex|ltx> -``` -## Usage -```bash -$ ltximg --latex [<options>] <file.tex> -$ ltximg --arara [<options>] <file.tex> -$ ltximg [<options>] <file.tex> -$ ltximg <file.tex> -``` -If used without `[<compiler>]` and `[<options>]` the extracted environments are converted to `pdf` image format -and saved in the `/images` directory using `pdflatex` and `preview` package. Relative or absolute `paths` for files -and directories is not supported. If the last `[<options>]` take a *list separated by commas*, you need `--` at the end. - -## Default environments extract -```bash - pspicture tikzpicture pgfpicture psgraph postscript PSTexample -``` -## Options - -```bash - [default] --h, --help Display command line help and exit [off] --l, --license Display GPL license and exit [off] --v, --version Display current version (1.7) and exit [off] --t, --tif Create .tif files using ghostscript [gs] --b, --bmp Create .bmp files using ghostscript [gs] --j, --jpg Create .jpg files using ghostscript [gs] --p, --png Create .png files using ghostscript [gs] --e, --eps Create .eps files using poppler-utils [pdftops] --s, --svg Create .svg files using poppler-utils [pdftocairo] --P, --ppm Create .ppm files using poppler-utils [pdftoppm] --g, --gray Gray scale for images using ghostscript [off] --f, --force Capture "\psset" and "\tikzset" to extract [off] --n, --noprew Create images files whitout "preview" package [off] --d <integer>, --dpi <integer> - Dots per inch resolution for images [150] --m <integer>, --margin <integer> - Set margins for pdfcrop [0] ---imgdir <dirname> Set name of directory to save images [images] ---zip Compress files generated in .zip format [off] ---tar Compress files generated in .tar.gz format [off] --o <filename>, --output <filename> - Create output file [off] ---verbose Verbose printing [off] ---srcenv Create files whit only code environment [off] ---subenv Create files whit preamble and code [off] ---latex Using latex>dvips>ps2pdf for compiler input - and pdflatex for compiler output [off] ---dvips Using latex>dvips>ps2pdf for compiler input - and latex>dvips>ps2pdf for compiler output [off] ---arara Use arara for compiler input and output [off] ---xetex Using xelatex for compiler input and output [off] ---dvipdf Using dvipdfmx for compiler input and output [off] ---luatex Using lualatex for compiler input and output [off] ---prefix <string> Set prefix append to each image file [off] ---norun Run script, but no create images files [off] ---nopdf Don't create a ".pdf" image files [off] ---nocrop Don't run pdfcrop [off] ---verbcmd <cmdname> Set "\cmdname" verbatim command [myverb] ---clean (doc|pst|tkz|all|off) - Removes specific text in output file [doc] ---extrenv <env1,...> Add new environments to extract [empty] ---skipenv <env1,...> Skip environments to extract [empty] ---verbenv <env1,...> Add verbatim environments [empty] ---writenv <env1,...> Add verbatim write environments [empty] ---deltenv <env1,...> Delete environments in output file [empty] -``` -## Example -```bash -$ ltximg --latex -e -p --srcenv --imgdir=mypics -o test-out test-in.ltx -``` -```bash -$ ltximg --latex -ep --srcenv --imgdir mypics -o test-out test-in.ltx -``` - Create a `/mypics` directory whit all extracted environments converted to - image formats (`.pdf`, `.eps`, `.png`), individual files whit source code (`.tex`) - for all extracted environments, a file `test-out.ltx` whit all environments converted to `\includegraphics` - and file `test-in-fig-all.tex` with only the extracted environments using - `latex>dvips>ps2pdf` and `preview` package for `<input file>` and `pdflatex` - for `<output file>`. - -## Documentation - For full documentation use: -```bash -$ texdoc ltximg -``` - For recreation all documentation use: -```bash -$ arara ltximg-doc.dtx -``` - -## Licence -This program is free software; you can redistribute it and/or modify it under the terms of the GNU -General Public License as published by the Free Software Foundation; either version 3 of the License, -or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even -the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -License for more details. - -## Author - -Written by Pablo González L <pablgonz@yahoo.com>, last update 2019-08-24. - -## Copyright - -Copyright 2013 - 2019 by Pablo González L -%</readme> -%<*internal> -\fi -\def\nameofplainTeX{plain} -\ifx\fmtname\nameofplainTeX\else - \expandafter\begingroup -\fi -%</internal> -%<*internal> -\input docstrip.tex -\keepsilent -\askforoverwritefalse -\nopreamble\nopostamble -\generate{ - \file{README.md}{\from{\jobname.dtx}{readme}} -} -\ifx\fmtname\nameofplainTeX - \expandafter\endbatchfile -\else - \expandafter\endgroup -\fi -%</internal> -%<*documentation> -\documentclass{ltxdoc} -\usepackage[top=0.5in, bottom=0.5in, left=2in, right=1in,footskip=0.2in,% - headsep=10pt]{geometry} % page dimension -\usepackage{unicode-math} % -\setmathfont[Scale = 0.95]{Latin Modern Math} -\setmainfont[ - Numbers = OldStyle, - Ligatures = TeX, - Scale = 0.95, - UprightFont = *-Regular, - ItalicFont = *-Italic, - BoldFont = *-Bold, - BoldItalicFont = *-BoldItalic, - SmallCapsFeatures = {Letters=SmallCaps}, - Extension =.otf]{LibertinusSerif} -\setsansfont[ - Numbers = OldStyle, - Ligatures = TeX, - Scale = 0.95, - UprightFont = *-Regular, - ItalicFont = *-Italic, - BoldFont = *-Bold, - SmallCapsFeatures = {Letters=SmallCaps}, - Extension = .otf]{LibertinusSans} -\setmonofont[ - Scale = 0.80, - Extension = .otf, - UprightFont = *-Regular , - ItalicFont = *-RegularIt, - BoldFont = *-Medium , - BoldItalicFont = *-MediumIt - ]{SourceCodePro} % source code font -\newfontfamily\lmmitalic{lmmono10-italic.otf}[ - Scale = 0.95,% - Extension = .otf,% - ItalicFont = lmmono10-italic,% - SmallCapsFont = lmmonocaps10-oblique,% - SlantedFont = lmmonoslant10-regular, - ] -\newfontfamily\fetamono{ffmw10.otf}[ - Scale = 0.95,% - RawFeature ={+latn,+rand,+kern,+size},% - ] -\newfontfamily\libertinusinitials{LibertinusSerifInitials-Regular.otf} -\usepackage{microtype,hologo} % LaTeX logo -\usepackage{enumitem,lastpage,microtype,titletoc} % custom -\usepackage[svgnames]{xcolor} % -\usepackage[sf,bf,compact,medium,pagestyles]{titlesec} -\usepackage{adjustbox,multicol,hyperref,xparse,listings,accsupp} -\usepackage{hyperxmp,imakeidx}% -\PageIndex -\EnableCrossrefs -\newcommand{\HP}[1]{\emph{\hyperpage{#1}}\normalsize} -\def\SortIndex#1#2{\index{#1\actualchar#2|HP}} -\indexsetup{level=\section,firstpagestyle=myheader} -%\makeindex[name=mydoc,options=-s gind.ist,columnsep=15pt,title={Index of Documentation}] -\makeindex[options=-s gind.ist,columnsep=15pt,title={Index of Documentation}] -% don't copy numbers in code example -\newcommand*{\noaccsupp}[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}} - -% parindent -\setlength{\parindent}{0pt} - -% Colors for options -\definecolor{optcolor}{rgb}{0.281,0.275,0.485} - -% Identification -\def\myscript{ltximg} -\def\fileversion{1.7} -\def\filedate{2019-08-24} - -% Logo whit libertuns and fetamono font -\newsavebox{\logobox} -\savebox{\logobox}{% - \normalsize% - {\libertinusinitials% - \textcolor{red}{L}\hspace{-3.0pt}% - \raisebox{-0.2em}{\small \textcolor{green}{T}}% - \hspace{-2.9pt}\textcolor{blue}{X}}% - \hspace{-1pt}\fetamono{\textcolor{gray}{img}}% -}% -\makeatletter -\newcommand{\LTXimg}{% - \settoheight{\@tempdima}{L}% - \resizebox{!}{\@tempdima}{\usebox{\logobox}}% -} -\makeatother - -% email https://tex.stackexchange.com/a/663 -\catcode`\_=11\relax% -\newcommand\email[1]{\_email #1\q_nil}% -\def\_email#1@#2\q_nil{% - \href{mailto:#1@#2}{{\emailfont #1\emailampersat #2}}% -}% -\newcommand\emailfont{\sffamily}% -\newcommand\emailampersat{{\color{NavyBlue}\footnotesize@}}% -\catcode`\_=8\relax% % - -% Config hyperref -\hypersetup{ - linkcolor = blue!50, - citecolor = red!50,% - urlcolor = magenta,% - colorlinks = true,% - pdftitle = {.:: ltximg \fileversion{} (\filedate) --- LaTeX environments to image formats ::.},% - pdfauthor = {Pablo Gonz\'{a}lez Luengo},% - pdfsubject = {Documentation for version \fileversion},% - pdfcopyright = {\textcopyright 2019 by Pablo González Luengo}, - pdfcontacturl = {https://github.com/pablgonz/ltximg}, - pdfkeywords = {extract, conversion, images, tikz, pstricks}, - pdfstartview = {FitH},% - bookmarksopenlevel = 2,% -} - -% Configuration titleps -\settitlemarks{section} -\renewpagestyle{plain}[\color{gray}\small\sffamily]{ -\setfoot{}{}{\thepage/\pageref{LastPage}}} - -\newpagestyle{myheader}[\color{gray}\small\sffamily]{ -\renewcommand\makeheadrule{\color{gray}\rule[0.45\baselineskip]{\linewidth}{0.4pt}} -\setfoot{\scalebox{0.85}{\LTXimg}\space\textcopyright\space 2019 by Pablo González L} - {} - {\thepage/\pageref{LastPage}} -\sethead{\raisebox{0.75\baselineskip}{Documentation for version \fileversion\space[\filedate]}} - {} - {\raisebox{0.75\baselineskip}{\scshape\small\S.\thesection\space\sectiontitle}} -} -\setlength{\headheight}{21pt}% - -% Table of contents -\titlecontents{section}[0mm]{}% - {\bfseries\contentspush{\makebox[4mm][l]{\thecontentslabel\hfill}}}% - {\hspace*{-4mm}}% numberless - {\hspace{0.25em}\titlerule*[6pt]{.}\contentspage}% - -\titlecontents{subsection}[4mm]{}% - {\contentspush{\makebox[6mm][l]{\thecontentslabel\hfill}}} - {\hspace*{-10mm}}% numberless - {\hspace{0.25em}\titlerule*[6pt]{.}\contentspage}% - -\titlecontents{subsubsection}[10mm]{}% - {\contentspush{\makebox[8mm][l]{\thecontentslabel\hfill}}} - {\hspace*{-18mm}}% numberless - {\hspace{0.25em}\titlerule*[6pt]{.}\contentspage}% - -\makeatletter -\renewcommand\tableofcontents{% -\begingroup% -\section*{\contentsname\quad{\color{gray}\leaders\hrule height 5pt depth -4.4pt\hfill}% - \@mkboth{% - \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% -\vspace*{-14pt} -\setlength{\columnsep}{10pt}% - \begin{multicols}{2}% - \@starttoc{toc}% -\end{multicols}% -\vspace*{-3pt}{\color{gray}\hrule height 0.6pt}% -\vspace*{5pt} -\endgroup -} -\makeatother - -% Custom \meta[...]{...}, \marg[...]{...} and \oarg[...]{...} for color -\ExplSyntaxOn -%^^A user level commands -\RenewDocumentCommand{\meta}{O{}m} - { - \ltximg_meta_generic:Nnn \ltximg_meta:n { #1 } { #2 } - } -\RenewDocumentCommand{\marg}{O{}m} - { - \ltximg_meta_generic:Nnn \ltximg_marg:n { #1 } { #2 } - } -\RenewDocumentCommand{\oarg}{O{}m} - { - \ltximg_meta_generic:Nnn \ltximg_oarg:n { #1 } { #2 } - } -%^^A variables and keys -\tl_new:N \l_ltximg_meta_font_tl - -\keys_define:nn { ltximg/meta } - { - type .choice:, - type / tt .code:n = \tl_set:Nn \l_ltximg_meta_font_tl { \ttfamily }, - type / rm .code:n = \tl_set:Nn \l_ltximg_meta_font_tl { \rmfamily }, - type .initial:n = tt, - cf .tl_set:N = \l_ltximg_meta_color_tl, - cf .initial:n = black, - ac .tl_set:N = \l_ltximg_meta_anglecolor_tl, - ac .initial:n = black, - sbc .tl_set:N = \l_ltximg_meta_brackcolor_tl, - sbc .initial:n = black, - cbc .tl_set:N = \l_ltximg_meta_bracecolor_tl, - cbc .initial:n = black, - } -%^^A internal commands -\cs_new_protected:Npn \ltximg_meta_generic:Nnn #1 #2 #3 - { - \group_begin: - \keys_set:nn { ltximg/meta } { #2 } - \color{ \l_ltximg_meta_color_tl } - \l_ltximg_meta_font_tl - #1 { #3 } % #1 is \ltximg_meta:n, \ltximg_marg:n or \ltximg_oarg:n - \group_end: - } -\cs_new_protected:Npn \ltximg_meta:n #1 - { - \ltximg_meta_angle:n { \textlangle } - \ltximg_meta_meta:n { #1 } - \ltximg_meta_angle:n { \textrangle } - } -\cs_new_protected:Npn \ltximg_marg:n #1 - { - \ltximg_meta_brace:n { \textbraceleft } - \ltximg_meta:n { #1 } - \ltximg_meta_brace:n { \textbraceright } - } -\cs_new_protected:Npn \ltximg_oarg:n #1 - { - \ltximg_meta_brack:n { [ } - \ltximg_meta:n { #1 } - \ltximg_meta_brack:n { ] } - } -\cs_new_protected:Npn \ltximg_meta_meta:n #1 - { - \textnormal{\textit{#1}} - } -\cs_new_protected:Npn \ltximg_meta_angle:n #1 - { - \group_begin: - \fontfamily{cmr}\selectfont - \textcolor{\l_ltximg_meta_anglecolor_tl}{#1} - \group_end: - } -\cs_new_protected:Npn \ltximg_meta_brace:n #1 - { - \group_begin: - \color{\l_ltximg_meta_bracecolor_tl} - #1 - \group_end: - } -\cs_new_protected:Npn \ltximg_meta_brack:n #1 - { - \textcolor{\l_ltximg_meta_brackcolor_tl}{#1} - } - -% \ltximg for body document -\DeclareDocumentCommand{\ltximg}{} - { - \normalsize\texttt{\bfseries\textcolor{NavyBlue}{ltximg}} - } - -% \prgname{sm} : #1 index compiler, #2 index programs: -\DeclareDocumentCommand{\prgname}{sm} - {% - \IfBooleanTF{#1} - { - \textcolor{ForestGreen}{\ttfamily\bfseries{#2}} - \SortIndex{compiler}{Compiler>\small\texttt{#2}} - } - { - \textcolor{ForestGreen}{\ttfamily\bfseries{#2}} - \SortIndex{programs}{Programs>\small\texttt{#2}} - } - }% - -% \prgopt{sm} : #1 compiler opt, #2 program opt: -\DeclareDocumentCommand{\prgopt}{sm} - {% - \IfBooleanTF{#1} - { - \textcolor{gray}{\ttfamily\bfseries{-{}#2}} - \SortIndex{compiler ~ options}{Compiler ~ options>\small\texttt{-{}#2}}% - } - { - \mbox{\texttt{-{}#2}}% - \SortIndex{#2}{\small\texttt{-{}#2} (program ~ option)}% - } - } - -% \scriptname*{m} -\DeclareDocumentCommand{\scriptname}{m} - { - \textcolor{ForestGreen}{\ttfamily\bfseries{#1}} - \SortIndex{scripts}{Scripts>\small\texttt{#1}}% - } - -% \scriptopt{m} -\DeclareDocumentCommand{\scriptopt}{m} - { - \mbox{\texttt{#1}} - \SortIndex{script ~ option}{Script ~ options>\small\texttt{#1}}% - } - -% \pkgname{m} -\DeclareDocumentCommand{\pkgname}{ m } - { - \textsf{\textcolor{SlateBlue}{#1}} - \SortIndex{packages}{Packages>\small\texttt{#1}} - \SortIndex{#1}{\texttt{#1} ~ (package)} - }% - -% \pkgopt{m} -\DeclareDocumentCommand{\pkgopt}{ m } - { - \textsf{\textcolor{Orange}{#1}} - \SortIndex{package ~ options}{Package ~ options>\small\texttt{#1}} - \SortIndex{#1}{\texttt{#1} (package ~ option)} - } - -% \env{sm}, #1 not used now -\DeclareDocumentCommand{\env}{m} - { - \textcolor{optcolor}{\texttt{#1}}% - \SortIndex{environment}{Environments>\small\texttt{#1}}% - } - -% \ics{sm}, #1 not used now -\DeclareDocumentCommand{\ics}{sm} - { - \textcolor{optcolor}{\ttfamily{\textbackslash#2}}% - \SortIndex{#2}{\texttt{\small\textbackslash#2}} - } - -% file extention -\DeclareDocumentCommand{\fext}{m} - { - \mbox{\textcolor{optcolor}{\ttfamily\bfseries{.#1}}}% - \SortIndex{files ~ extention}{File ~ extentions >\small\texttt{.#1}}% - } - -% image format/extention -\DeclareDocumentCommand{\iext}{m} - {% - \textcolor{optcolor}{\ttfamily\bfseries{#1}}% - \SortIndex{Image format}{Image formats>\small\texttt{#1}}% - } - -% \sysydir{m} -\DeclareDocumentCommand{\sysdir}{m} - { - \mbox{\textcolor{NavyBlue}{\ttfamily{/#1}}}% - } - -% \sysfile{m} ...only for color in some examples -\DeclareDocumentCommand{\sysfile}{m} - { - \mbox{\textcolor{gray}{\ttfamily{#1}}} - } - -% \OSsystem{m} ...only for color in some examples -\DeclareDocumentCommand{\OSsystem}{m} - { - \mbox{\textcolor{NavyBlue}{\ttfamily\bfseries{#1}}}% - \SortIndex{Operating ~ system}{Operating ~ system>\small\texttt{#1}} - } - -% \cmdopt[short]{long} -\DeclareDocumentCommand{\cmdopt}{om} - { - \IfNoValueTF{#1} - { - \textcolor{optcolor}{\ttfamily\bfseries{-\/-#2}} - } - { - \textcolor{optcolor}{\ttfamily\bfseries{-{}#1}}, - \textcolor{optcolor}{\ttfamily\bfseries{-\/-#2}} - } - \SortIndex{options}{\textsf{\myscript}\ options ~ in ~ command ~ line>\small\texttt{-\/-#2}}% - } - -\ExplSyntaxOff -% \DescribeIF{m}, #1 image format -\newsavebox{\marginIF} -\NewDocumentCommand{\DescribeIF}{ m } - {% - \begin{lrbox}{\marginIF}% - \begin{minipage}[t]{\marginparwidth}% - \raggedleft - \iext{#1} - \end{minipage}% - \end{lrbox}% - \leavevmode% - \marginpar{\usebox{\marginIF}}% - \ignorespaces% - }% - -% \myenv{environ} -\DeclareDocumentCommand\myenv{m} - { - \moveright 0.0pt \hbox{% - \begin{minipage}[t]{\marginparwidth}% - \raggedleft\ttfamily%\small% - {\textcolor{gray}{\textbackslash begin\{}}{\bfseries\textcolor{optcolor}{#1}}\textcolor{gray}{\}}\par% - \meta[ac=gray,cf=gray]{env content}\par% - {\textcolor{gray}{\textbackslash end\{}}{\bfseries\textcolor{optcolor}{#1}}\textcolor{gray}{\}}% - \end{minipage}% - } % close hbox - \SortIndex{Environment}{Environments suport by default>\small\texttt{#1}}% - } - -% \mytag{dtxtag} -\DeclareDocumentCommand\mytag{m}{% -\moveright 0.0pt \hbox{% - \begin{minipage}[t]{\marginparwidth}% - \raggedleft\ttfamily%\small% - \textcolor{gray}{\%<*}{\bfseries\textcolor{optcolor}{#1}}\textcolor{gray}{>}\par% - \meta[ac=gray,cf=gray]{content}\par% - \textcolor{gray}{\%</}{\bfseries\textcolor{optcolor}{#1}}\textcolor{gray}{>}% - \end{minipage}% - } % close hbox - \SortIndex{docstrip}{Docstrip tag>\small\texttt{#1}}% -}% - -% \DescribeTE{sm}, #1 tag, #2 env -\newsavebox{\marginenvtag} -\NewDocumentCommand\DescribeTE{sm}{% -\begin{lrbox}{\marginenvtag}% - \begin{minipage}[t]{\marginparwidth}% - \raggedleft - \IfBooleanTF{#1}{\mytag{#2}}{\myenv{#2}} - \end{minipage}% -\end{lrbox}% - \leavevmode% - \marginpar{\usebox{\marginenvtag}}% - \ignorespaces% -}% - -% DescribeOptFile*{options}{example}[!] -\newsavebox{\optinfile} -\NewDocumentCommand\DescribeOptFile{s m m O{\hphantom{!}}}{ -\begin{lrbox}{\optinfile}% - \begin{minipage}[t]{\marginparwidth}% - \raggedleft\ttfamily\bfseries% - \textcolor{optcolor}{\%{#4}\myscript\hspace*{1.5pt}}% - \end{minipage}% -\end{lrbox}% -\leavevmode% -\marginpar{\usebox{\optinfile}}% -\lapbox[0pt]{-0.85\marginparsep}{\textcolor{red}{\texttt{:}}}% -\textcolor{optcolor}{\bfseries\texttt{{#2}}}% -\textcolor{red}{\hspace*{2.5pt}\texttt{:}} -\hspace*{-1pt}\marg[cbc=optcolor,ac=gray,cf=gray]{#3} -\vspace*{2pt}\par% -\IfNoValueTF{#1} -{}%% -{% -\SortIndex{options}{\textsf{\myscript}\ options in input file>\small\texttt{#2}}% -}% -} - -% \DescribeCmd[...]{...}{...}{...}, need changue to \DescribeOptCmd -\newsavebox{\optcmdline} -\NewDocumentCommand\DescribeCmd{ommm}{ -\begin{lrbox}{\optcmdline}% - \begin{minipage}[t]{\marginparwidth}% - \ttfamily\bfseries\raggedleft% - \IfNoValueTF{#1} - {\textcolor{optcolor}{-\/-#2}} - {\textcolor{optcolor}{-{#1}}\textcolor{gray}{,} \textcolor{optcolor}{-\/-#2}}% - \end{minipage}% -\SortIndex{options}{\textsf{\myscript}\ options in command line>\small\texttt{-\/-#2}}% -\end{lrbox}% - \leavevmode% - \marginpar{\usebox{\optcmdline}}% - \ignorespaces - \meta[ac=gray,cf=gray]{\textnormal{\sffamily{#3}}} - \hfill\textcolor{gray}{\textsf{(default: {#4})}}% - \vspace*{2pt}\par% -} - -% Create a language for documentation -\lstdefinelanguage{ltximg-doc}{ - texcsstyle=*,% - escapechar=`,% - showstringspaces=false,% - extendedchars=true, % - stringstyle = {\color{red}},% -% comments - morecomment=[l]{\%},% - commentstyle=\lmmitalic\color{lightgray},% -% Important words 1 - keywordstyle=[1]{\color{NavyBlue}},% - keywords=[1]{AtBeginDocument,begin,end,documentclass,BEGIN,END},% -% Other words 2 - keywordstyle=[2]{\color{blue!75}},% - keywords=[2]{usepackage,graphicspath,RequirePackage,renewcommand,% - PreviewBbAdjust,usetikzlibrary,tikzexternalize,psset,tikzset,PrependGraphicsExtensions,% - DefineShortVerb,lstMakeShortInline,MakeSpecialShortVerb,UndefineShortVerb},% -% Other words 3 - keywordstyle=[3]{\color{optcolor!85}},% - keywords=[3]{document,graphicx,preview,active,tightpage,article,grfext,description,filecontents,% - external,tikz,clean,pst,tkz,eps,pdf,xetex,latex,luatex,dvips,png,srcenv,noprew,imgdir,prefix,output},% -% Reserved words 4(inputfile options) - keywordstyle=[4]{\color{optcolor}},% - keywords=[4]{ltximg,noltximg,remove,options,pspicture,endpspicture,% - PSTexample,pgfpicture, endpgfpicture, tikzpicture, endtikzpicture, % - psgraph, endpsgraph,nopreview,postscript, arara,extrenv,deltenv,skipenv},% -% Reserved in orange - keywordstyle=[5]{\color{OrangeRed}},% - keywords=[5]{images,includegraphics,env,file-out,pics,doc},% -% Reserved in orange - keywordstyle=[6]{\color{red}},% - keywords=[6]{verb,myverb},% -}[keywords,tex,comments,strings]% end languaje - -% \begin{examplecode}[optlst]...\end{examplecode} -\lstnewenvironment{examplecode}[1][]{% -\lstset{ - language=ltximg-doc,% - stringstyle = {\color{red}},% - basicstyle=\ttfamily\small,% - numbersep=1em,% - numberstyle=\tiny\color{gray}\noaccsupp,% - rulecolor=\color{gray!50},% - framesep=\fboxsep,% - framerule=\fboxrule,% - xleftmargin=\dimexpr\fboxsep+\fboxrule\relax,% - xrightmargin=\dimexpr\fboxsep+\fboxrule\relax,% -% literateee - literate=*{\{}{{\bfseries\textcolor{gray}{\{}}}{1} - {\}}{{\bfseries\textcolor{gray}{\}}}}{1} - {[}{{\bfseries\textcolor{optcolor}{[}}}{1} - {]}{{\bfseries\textcolor{optcolor}{]}}}{1} - {*}{{\bfseries\textcolor{red}{*}}}{1} - {:}{{\textcolor{red}{:}}}{1} - {,}{{\textcolor{gray}{,}}}{1} - {=}{{\textcolor{gray}{=}}}{1} - {/}{{\textcolor{gray}{/}}}{1} - {\%\ ltximg}{{\textcolor{gray}{\%}\space\bfseries\textcolor{optcolor}{ltximg}}}{8} - {\%\ arara}{{\textcolor{gray}{\%}\space\bfseries\textcolor{optcolor}{arara}}}{7} - {\{arara}{{\textcolor{gray}{\{arara}}}{6} - {\%<*remove>}{{\bfseries\textcolor{gray}{\%<*remove>}}}{10} - {\%</remove>}{{\bfseries\textcolor{gray}{\%</remove>}}}{10} - {\%<*ltximg>}{{\bfseries\textcolor{gray}{\%<*ltximg>}}}{10} - {\%</ltximg>}{{\bfseries\textcolor{gray}{\%</ltximg>}}}{10} - {\%<*noltximg>}{{\bfseries\textcolor{gray}{\%<*noltximg>}}}{12} - {\%</noltximg>}{{\bfseries\textcolor{gray}{\%</noltximg>}}}{12},% - #1,% - }% close lstset -}% -{}% close examplecode - -% \begin{examplecmd}...\end{examplecmd} -\lstnewenvironment{examplecmd}{% -\lstset{ - language=ltximg-doc,% - basicstyle=\ttfamily\small,% - frame=single,% - rulecolor=\color{gray!50},% - framesep=\fboxsep,% - framerule=\fboxrule,% - xleftmargin=\dimexpr\fboxsep+\fboxrule\relax,% - xrightmargin=\dimexpr\fboxsep+\fboxrule\relax,% -% Reserved words (cmd line options) - classoffset=7,% - keywordstyle=\bfseries\color{optcolor},% - morekeywords={ltximg},% -% % Reserved words (cmd line options) - classoffset=8,% - keywordstyle={\bfseries\color{ForestGreen}},% - morekeywords={gs,pdftoppm,pdftocairo,pdftops},% -% Only for command line options - classoffset=5,% - keywordstyle=\color{blue},% - keywords={user,machine},% - literate=*{[}{{\textcolor{darkgray}{[}}}{1} - {]}{{\textcolor{darkgray}{]}}}{1} - {@}{{\textcolor{blue}{@}}}{1} - {\$}{{\textcolor{blue}{\$}}}{1} - {:}{{\textcolor{blue}{:}}}{1} - {§}{{\textcolor{red}{\$}}}{1} - {~}{{\textcolor{blue}{\bfseries\textasciitilde}}}{1}% - }% close lstset -}% -{}% close examplecmd - -% \lstinline[style=inline]|...| -\lstdefinestyle{inline} - { - language=ltximg-doc,% - basicstyle=\ttfamily\color{gray},% - escapechar=`,% - upquote=true,% - literate=*{\%}{{\bfseries\textcolor{gray}{\%}}}{1} - } - -% set default style -\lstset{style=inline} - - -\begin{document} - -\title{% - {\fetamono latex environments }\\[3pt]% - \scalebox{3.4}{\LTXimg}\\[2pt]% - {\fetamono\addfontfeature{LetterSpace=12.0} to image format}\\% - \Large - v\fileversion{} --- \filedate\thanks{% - This file describes a documentation for version \fileversion, last revised \filedate.}\\[25pt]% - \author{% - \large% - \raisebox{-1pt}{\textcopyright}{}2013--2019 by Pablo González L% - \thanks{E-mail: \texttt{\guillemotleft}\email{pablgonz@yahoo.com}\texttt{\guillemotright}} - }% -\small -\textsc{ctan}: \url{http://www.ctan.org/pkg/ltximg}\\ -\textsc{git}: \url{https://github.com/pablgonz/ltximg} -\vspace*{-2cm} -}% -\date{} -\maketitle - -\begin{abstract} -\ltximg{} is a \prgname{perl} \emph{script} that automates the process of -extracting and converting environments provided by \pkgname{tikz}, % -\pkgname{pstricks} and other packages from \meta{input file} to image -formats in individual files using \prgname{ghostscript} and % -\prgname{poppler-utils}. Generates a file with only extracted environments -and another with environments converted to \ics{includegraphics}. -\end{abstract} - -\tableofcontents -\setlength{\parskip}{3pt} - -\section{Motivation} - -The original idea was to extend the functionality of the \scriptname{pst2pdf} -script (only for \env{pspicture} and \env{postscript}) to work with % -\env{tikzpicture} and other environments. - -The \pkgname{tikz} package allows to externalize the environments, but, the -idea was to be able to extend this to any type of environment covering three -central points: - -\begin{enumerate}[font=\small , noitemsep,leftmargin=*] - -\item Generate separate files for environments and converted into images. - -\item Generate a file with only the extracted environments. - -\item Generate a file replacing the environments by \ics{includegraphics}. -\end{enumerate} - -From the side of \TeX{} there are some packages that cover several of these -points such as the \pkgname{preview}, \pkgname{xcomment}, \pkgname{external} -and \pkgname{cachepic} packages among others, but none covered all points. - -In the network there are some solutions in \texttt{bash} that were able to -extract and convert environments, but in general they presented problems -when the document contained \emph{verbatim style} code or were only -available for \OSsystem{Linux}. - -Analysed the situation the best thing was to create a new \emph{script} that -was able to cover the three points and was multi platform, the union of all -these ideas is born \ltximg. Finding the correct \emph{regular expressions} -and writing \emph{documentation} would be the great mission (which does not -end yet). - -\thispagestyle{plain} -\newpage -\pagestyle{myheader} -\section{Required Software}\label{sec:software} - -For the complete operation of \ltximg{} you need to have a modern % -\hologo{TeX} distribution such as \hologo{TeX}Live or \hologo{MiKTeX}, have -a version equal to or greater than \liningnums{5.28} of \prgname{perl}, a -version equal to or greater than \liningnums{9.24} of \prgname{ghostscript} -and have a version equal to or greater than \liningnums{0.52} of % -\prgname{poppler-utils}. - -The distribution of \hologo{TeX}Live 2019 for \OSsystem{Windows} includes % -\ltximg{} and all requirements, \hologo{MiKTeX} users must install the -appropriate software for full operation. - -The script has been tested on \OSsystem{Windows} (version 10) and % -\OSsystem{Linux} (fedora 30) in x64 architecture using \prgname{ghostscript} % -\liningnums{v9.26}, \prgname{poppler-utils} \liningnums{v0.52} to % -\liningnums{v0.73} and \prgname{perl} from \liningnums{v5.28} to % -\liningnums{v5.30}. - -\section{How it works} - -\label{sec:howtowork} - -It is important to have a general idea of how the \emph{extraction and -conversion} process works and the requirements that must be fulfilled so -that everything works correctly, for this we must be clear about some -concepts related to how to work with the \meta{verbatim content}, the % -\meta{input file}, the \meta{output file} and the \meta{steps process}. - -\subsection{The input file} - -\label{sec:inputfile} - -The \meta{input file} must comply with certain characteristics in order to -be processed, the content at the beginning and at the end of the \meta{input -file} is treated in a special way, before \lstinline|\documentclass| can only be -commented lines and after \lstinline|\end{document}| can go any type of content, -internally will split the \meta{input file} at this points. - -If the \meta{input file} contains files using \ics{input} or \ics{include} -these will not be processed, from the side of the \emph{script} they only -represent lines within the file, if you want them to be processed it is -better to use the \scriptname{latexpand} first and then process the file. - -Like \ics{input} or \ics{include}, blank lines, vertical spaces and tab -characters are treated literally, for the \emph{script} the \meta{input file} -is just a set of characters, as if it was a simple text file. It is -advisable to format the source code \meta{input file} using utilities such -as \prgname{chktex} and \scriptname{latexindent}, especially if you want to -extract the source code of the environments. - -An example of the \meta{input file}: - -\begin{examplecode}[numbers=left,frame=single] -% some commented lines at begin document -\documentclass{article} -\usepackage{tikz} -\begin{document} -Some text -\begin{tikzpicture} -Some code -\end{tikzpicture} -Always use \verb|\begin{tikzpicture}| -and \verb|\end{tikzpicture}| to open -and close environment -\begin{tikzpicture} -Some code -\end{tikzpicture} -Some text -\end{document} -% some lines after end document -\end{examplecode} - -\subsection{Verbatim contents}\label{sec:verbatim} - -One of the greatest capabilities of \ltximg{} script is to skip the complications -that \emph{verbatim style} content produces with the extraction of environments. -In order to skip the complications, the verbatim content is classified into -three types: - -\begin{itemize}[nosep] - \item Verbatim in line - \item Verbatim standard - \item Verbatim write -\end{itemize} - -Each of these classifications works differently within the creation and -extraction process using different regular expressions for it. - -\newpage - -\subsubsection{Verbatim in line} - -\label{sec:verbatim:inline} - -The small pieces of code written in the same line using a verbatim command -are considered \meta{verbatim in line}, such as \lstinline+\verb|<code>|+. -Most verbatim commands provide by packages \pkgname{minted}, % -\pkgname{fancyvrb} and \pkgname{listings} have been tested and are fully -supported. They are automatically detected the verbatim command generates by -\ics{newmint} and \ics{newmintinline} and the following command list: - -\begin{multicols}{3} -\begin{itemize}[font=\sffamily\small,partopsep=5pt,parsep=5pt,nosep,leftmargin=*] -\small -\item \ics{mint} -\item \ics{spverb} -\item \ics{qverb} -\item \ics{fverb} -\item \ics{verb} -\item \ics{Verb} -\item \ics{lstinline} -\item \ics{pyginline} -\item \ics{pygment} -\item \ics{Scontents} -\item \ics{tcboxverb} -\item \ics{mintinline} -\end{itemize} -\end{multicols} - -Some packages define abbreviated versions for verbatim commands as % -\ics{DefineShortVerb}, \ics{lstMakeShortInline} and % -\ics{MakeSpecialShortVerb}, will be detected automatically if are declared -explicitly in \meta{input file}. - -The following consideration should be kept in mind for some packages that -use abbreviations for verbatim commands, such as \pkgname{shortvrb} or % -\pkgname{doc} for example in which there is no explicit command in the -document by means of which the abbreviated form can be detected, for -automatic detection need to find \ics{DefineShortVerb} explicitly to process -it correctly. The solution is quite simple, just add in \meta{input file}: - -\begin{examplecode} -\UndefineShortVerb{\|} -\DefineShortVerb{\|} -\end{examplecode} - -depending on the package you are using. If your verbatim command is not -supported by default or can not detect, use the options described in \ref% -{sec:optline} and \ref{sec:optfile}. - -\subsubsection{Verbatim standard} - -\label{sec:verbatim:std} - -These are the classic environments for writing code are considered % -\meta{verbatim standard}, such as \env{verbatim} and \env{lstlisting} -environments. The following list is considered as \meta{verbatim standard} -environments: - -\begin{multicols}{4} -\begin{itemize}[font=\sffamily\small, noitemsep,leftmargin=*] -\ttfamily\small -\item Example -\item CenterExample -\item SideBySideExample -\item PCenterExample -\item PSideBySideExample -\item verbatim -\item Verbatim -\item BVerbatim -\item LVerbatim -\item SaveVerbatim -\item PSTcode -\item LTXexample -\item tcblisting -\item spverbatim -\item minted -\item listing -\item lstlisting -\item alltt -\item comment -\item chklisting -\item verbatimtab -\item listingcont -\item boxedverbatim -\item demo -\item sourcecode -\item xcomment -\item pygmented -\item pyglist -\item program -\item programl -\item programL -\item programs -\item programf -\item programsc -\item programt -\end{itemize} -\end{multicols} - -They are automatically detected \meta{verbatim standard} environments generates by commands: - -\begin{multicols}{2} -\begin{itemize}[font=\sffamily\small, noitemsep,leftmargin=*] -\small -\item \ics{DefineVerbatimEnvironment} -\item \ics{NewListingEnvironment} -\item \ics{DeclareTCBListing} -\item \ics{ProvideTCBListing} -\item \ics{lstnewenvironment} -\item \ics{newtabverbatim} -\item \ics{specialcomment} -\item \ics{includecomment} -\item \ics{newtcblisting} -\item \ics{NewTCBListing} -\item \ics{newverbatim} -\item \ics{NewProgram} -\item \ics{newminted} -\end{itemize} -\end{multicols} - -If any of the \meta{verbatim standard} environments is not supported by -default or can not detected, you can use the options described in \ref% -{sec:optline} and \ref{sec:optfile}. - -\subsubsection{Verbatim write} - -\label{sec:verbatim:write} - -Some environments have the ability to write external files directly, these -environments are considered \meta{verbatim write}, such as \env{filecontents} -or \env{VerbatimOut} environments. The following list is considered as % -\meta{verbatim write} environments: - -\begin{multicols}{3} -\begin{itemize}[font=\sffamily\small, noitemsep,leftmargin=*] -\ttfamily\small -\item scontents -\item filecontents -\item tcboutputlisting -\item tcbexternal -\item tcbwritetmp -\item extcolorbox -\item extikzpicture -\item VerbatimOut -\item verbatimwrite -\item filecontentsdef -\item filecontentshere -\item filecontentsdefmacro -\end{itemize} -\end{multicols} - -They are automatically detected \meta{verbatim write} environments generates -by commands: - -\begin{multicols}{2} -\begin{itemize}[font=\sffamily\small, noitemsep,leftmargin=*] -\small -\item \ics{renewtcbexternalizetcolorbox} -\item \ics{renewtcbexternalizeenvironment} -\item \ics{newtcbexternalizeenvironment} -\item \ics{newtcbexternalizetcolorbox} -\end{itemize} -\end{multicols} - -If any of the \meta{verbatim write} environments is not supported by default -or can not detected, you can use the options described in \ref{sec:optline} -and \ref{sec:optfile}. - -\subsection{Steps process} - -\label{sec:steps:process} - -For creation of the image formats, extraction of code and creation of an -output file, \ltximg{} need a various steps. Let's assume that the % -\meta{input file} is \sysfile{test.tex}, \meta{output file} is % -\sysfile{test-out}, the working directory are \sysdir{workdir}, the -directory for images are \sysdir{workdir/images} and the user's temporary -directory is \sysdir{tmp} and we want to generate images in \iext{pdf} -format together with the source codes of the environments. - -\begin{description}[font=\sffamily\small,leftmargin=0em,style=nextline] -\item[Comment and ignore] -The first step is read and validated \oarg[type=rm,cf=gray,sbc=optcolor,ac=gray]{options} from the command -line and \sysfile{test.tex}, verifying that \sysfile{test.tex}, \sysfile{test-out} and the -directory \sysdir{images} are in \sysdir{workdir}, create the directory \sysdir{workdir/images} if it does -not exist and a temporary directory \sysdir{tmp/hG45uVklv9}. The entire file \sysfile{test.tex} is loaded -in memory and proceeds (in general terms) as follows: - -\begin{quotation} -Search the words \lstinline|\begin{| and \lstinline|\end{| in verbatim standard, verbatim write, verbatim in line and -commented lines, if it finds them, converts to \lstinline|\BEGIN{| and \lstinline|\END{|, then places all code to -extract inside the \lstinline|\begin{preview}| \ldots \lstinline|\end{preview}|. -\end{quotation} - -At this point all the code you want to extract is inside \lstinline|\begin{preview}| \ldots \lstinline|\end{preview}| -and the files \sysfile{test-fig-1.tex}, \sysfile{test-fig-2.tex}, \ldots{} are generated and saved in \sysdir{images}. - -\item[Create random file] -In the second step, with the file already loaded in memory, creating a temporary file with a -random number (1981 for example) and proceed in two ways according to the \oarg[type=rm,cf=gray,sbc=optcolor,ac=gray]{options} -passed to the script: - -\begin{enumerate} -\item If script is call \emph{whitout} \cmdopt[n]{noprew} options, adds the -following lines to the beginning of the \sysfile{test.tex} (in memory): - -\begin{examplecode} -\AtBeginDocument{% -\RequirePackage[active,tightpage]{preview} -\renewcommand\PreviewBbAdjust{-60pt -60pt 60pt 60pt}}% -% rest of input file -\end{examplecode} -And save in a temporary file \sysfile{test-fig-1981.tex} in \sysdir{workdir}. - -\item If script is call \emph{whit} \cmdopt[n]{noprew} options, all code to extract -its put inside the \env{preview} environment. The \lstinline|\begin{preview}|\ldots \lstinline|\end{preview}| -lines are only used as delimiters for extracting the content \emph{without} using the package \pkgname{preview}. - -Creating a temporary file \sysfile{test-fig-1981.tex} in \sysdir{workdir} -whit the same preamble of \sysfile{test.tex} but the body only contains code that you want to extract. -\end{enumerate} - -\item[Generate image formats] -In the third step the script run: -\begin{examplecmd} -[user@machine ~:]§`\small\meta[type=tt,cf=ForestGreen,ac=ForestGreen]{compiler}` -recorder -shell-escape `\small\sysfile{test-fig-1981.tex}` -\end{examplecmd} -generating the file \sysfile{test-fig-1981.pdf} whit all code extracted, move \sysfile{test-fig-1981.pdf} -to \sysdir{tmp/hG45uVklv9}, separate in individual files \sysfile{test-fig-1.pdf}, \sysfile{test-fig-2.pdf}, \ldots{} -and copy to \sysdir{workdir/images/}. The file \sysfile{test-fig-1981.tex} is moved to the \sysdir{workdir/images/} -and rename to \sysfile{test-fig-all.tex}. - -Note the options passed to \meta[type=tt,cf=ForestGreen,ac=ForestGreen]{compiler} does not include \prgopt*{output-directory} -(it is not supported) and always use \prgopt*{recorder} \prgopt*{shell-escape} you must keep this in mind if you use \prgname{arara}. - -\item[Create output file] -In the fourth step the script creates the output file \sysfile{test-out.tex} converting all extracted code to -\ics{includegraphics} and adding the following lines at end of preamble: - -\begin{examplecode}[numbers=left] -\usepackage{graphicx} -\graphicspath{{images/}} -\usepackage{grfext} -\PrependGraphicsExtensions*{.pdf} -\end{examplecode} - -If the packages \pkgname{graphicx} and \pkgname{grfext} are already loaded and the command \ics{graphicspath} -is found in the input file were detected automatically and only the changes will be added then proceed to run: -\begin{examplecmd} -[user@machine ~:]§`\small\meta[type=tt,cf=ForestGreen,ac=ForestGreen]{compiler}` -recorder -shell-escape `\small\sysfile{test-out.tex}` -\end{examplecmd} -generating the file \sysfile{test-out.pdf}. -\end{description} -Now the script read the files \sysfile{test-fig-1981.fls} and \sysfile{test-out.fls}, extract the information from the -temporary files generated in the process and then delete them together with the directory \sysdir{tmp/hG45uVklv9}. -An example for input and output file: - -\begin{minipage}[c]{0.5\textwidth} -\begin{examplecode}[numbers=left] -\documentclass{article} -\usepackage{tikz} -\begin{document} -Some text -\begin{tikzpicture} -Some code -\end{tikzpicture} -Always use \verb|\begin{tikzpicture}| -and \verb|\end{tikzpicture}| to open -and close environment -\begin{tikzpicture} -some code -\end{tikzpicture} -Some text -\end{document} -\end{examplecode} -\begin{flushleft} -\sysfile{test.tex} -\end{flushleft} -\end{minipage} -\begin{minipage}[c]{0.5\textwidth} -\begin{examplecode}[numbers=left] -\documentclass{article} -\usepackage{tikz} -\usepackage{graphicx} -\graphicspath{{images/}} -\usepackage{grfext} -\PrependGraphicsExtensions*{.pdf} -\begin{document} -Some text -\includegraphics[scale=1]{test-fig-1} -Always use \verb|\begin{tikzpicture}| -and \verb|\end{tikzpicture}| to open -and close environment -\includegraphics[scale=1]{test-fig-2} -Some text -\end{document} -\end{examplecode} -\begin{flushleft} -\sysfile{test-out.tex} -\end{flushleft} -\end{minipage} - -\section{Extract content} -\label{sec:extract} -The script provides two ways to extract content from \meta{input file}, using \meta[type=rm,cf=optcolor,ac=gray]{environments} -and \meta[type=rm,cf=optcolor,ac=gray]{docstrip tags}. Some environment (including a starred \texttt{\small\bfseries\textcolor{red}{*}} version) -are supported by default and if the environments are nested, the outermost will be extracted. - -\subsection{Default environments} -\label{sec:extract:env} -\DescribeTE{preview} -Environment provide by \pkgname{preview} package. If \env{preview} environments -found in the input file will be extracted and converted these. Internally -converts all environments to extract in \env{preview} environments. -Is better comment this package in preamble unless the option \cmdopt[n]{noprew}{} is -used. - -\vspace{\baselineskip} - -\DescribeTE{pspicture} -Environment provide by \pkgname{pstricks} package. The plain -syntax \lstinline|\pspicture ... \endpspicture| its converted to -\lstinline|\begin{pspicture} ... \end{pspicture}|. -\vspace{\baselineskip} - -\DescribeTE{psgraph} -Environment provide by \pkgname{pst-plot} package. The plain syntax \lstinline|\psgraph ... \endpsgraph| -its converted to \lstinline|\begin{psgraph} ... \end{psgraph}|. - -\vspace{\baselineskip} - -\DescribeTE{postscript} -Environment provide by \pkgname{pst-pdf} and \pkgname{auto-pst-pdf} packages. -Since the \pkgname{pst-pdf} and \pkgname{auto-pst-pdf} packages internally use -the \pkgname{preview} package, is better comment this in preamble. - -\vspace{\baselineskip} - -\DescribeTE{tikzpicture} -Environment provide by \pkgname{tikz} package. The plain syntax \lstinline|\tikzpicture ... \tikzpicture| -its converted to \lstinline|\begin{tikzpicture} ... \end{tikzpicture}| -but no a short \lstinline|\tikz...;|. -\vspace{\baselineskip} - -\DescribeTE{pgfpicture} -Environment provide by \pkgname{pgf} package. Since the script uses a -\emph{recursive regular expression} to extract environments, no presents problems -if present \lstinline|pgfinterruptpicture|. -\vspace{\baselineskip} - -\DescribeTE{PSTexample} -Environment provide by \pkgname{pst-exa} packages. The script automatically detects the -\lstinline|\begin{PSTexample}| \lstinline|...\end{PSTexample}| -environments and processes them as separately compiled files. The user should have loaded the -package with the [\pkgopt{swpl}] or [\pkgopt{tcb}] option and run the script -using \cmdopt{latex}{} or \cmdopt{xetex}. - -If you need to extract more environments you can use one of the options described in \ref{sec:optline} or \ref{sec:optfile}. - -\subsection{Extract whit docstrip tags} - -\label{sec:extract:tag} -\DescribeTE*{ltximg} -All content included between \lstinline|%<*ltximg> ... %</ltximg>| is extracted. -The tags can not be nested and should be at the beginning of the line and in separate lines. - -\begin{examplecode}[frame=single] -% no space before open tag %<* -%<*ltximg> -code to extract -%</ltximg> -% no space before close tag %</ -\end{examplecode} - -\subsection{Prevent extraction and remove}\label{sec:noextract} -Sometimes you do not want to extract all the environments from \meta{input file} or you want to -remove environments or arbitrary content, for example auxiliary files to generate a graphic. -The script provides a convenient way to solve this situation. - -\DescribeTE{nopreview} -Environment provide by \pkgname{preview} package. Internally the script -converts all no extract environments to \lstinline|\begin{nopreview} ... \end{nopreview}|. -Is better comment this package in preamble unless the option \cmdopt[n]{noprew}{} is used. -\vspace{\baselineskip} - -\DescribeTE*{noltximg} -All content betwen \lstinline|%<*noltximg> ... %</noltximg>| are ignored and no -extract. The start and closing of the tag must be at the beginning of the line. - -\begin{examplecode}[frame=single] -% no space before open tag %<* -%<*noltximg> -no extract this -%</noltximg> -% no space before close tag %</ -\end{examplecode} - -\DescribeTE*{remove} -All content betwen \lstinline|%<*remove> ... %</remove>| are deleted in the \meta{output file}. The start and closing -of the tag must be at the beginning of the line. - -\begin{examplecode}[frame=single] -% no space before open tag %<* -%<*remove> -lines removed in output file -%</remove> -% no space before close tag %</ -\end{examplecode} - -If you want to remove specific environments automatically you can use one of -the options described in \ref{sec:optline} or \ref{sec:optfile}. - -\section{Image Formats}\label{sec:image:format} -The \meta{image formats} generated by the \ltximg{} using \prgname{ghostscript} -and \textcolor{ForestGreen}{\ttfamily\bfseries poppler-utils} -are the following command lines: - -\DescribeIF{pdf} -The image format generated using \prgname{ghostscript}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -\end{examplecmd} - -\DescribeIF{eps} -The image format generated using \prgname{pdftoeps}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ pdftops -q -eps -\end{examplecmd} - -\DescribeIF{png} -The image format generated using \prgname{ghostscript}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=pngalpha -r 150 -\end{examplecmd} - -\newpage - -\DescribeIF{jpg} -The image format generated using \prgname{ghostscript}. The line executed by the system is: -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=jpeg -r 150 -dJPEGQ=100 \ - -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -\end{examplecmd} - -\DescribeIF{ppm} -The image format generated using \prgname{pdftoppm}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ pdftoppm -q -r 150 -\end{examplecmd} - -\DescribeIF{tif} -The image format generated using \prgname{ghostscript}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=tiff32nc -r 150 -\end{examplecmd} - -\DescribeIF{svg} -The image format generated using \prgname{pdftocairo}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ pdftocairo -q -r 150 -\end{examplecmd} - -\DescribeIF{bmp} -The image format generated using \prgname{ghostscript}. The line executed by the system is: - -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=bmp32b -r 150 -\end{examplecmd} - -\section{How to use} -\subsection{Syntax} -The syntax for \ltximg{} is simple: - -\begin{examplecmd} -[user@machine ~:]§ ltximg `\small\meta[type=tt,cf=ForestGreen,ac=ForestGreen]{compiler} \oarg[type=tt,cf=gray,sbc=optcolor,ac=gray]{options} \textcolor{gray}{\texttt{[-\/-]}} \meta[type=tt,cf=OrangeRed,ac=OrangeRed]{file.ext}` -\end{examplecmd} - -The extension \meta[type=tt,cf=OrangeRed,ac=OrangeRed]{ext} for \meta{input file} are \fext{tex} or \fext{ltx}, -relative or absolute paths for files and directories is not supported. If used without \meta[type=tt,cf=ForestGreen,ac=ForestGreen]{compiler} -and \oarg[type=tt,cf=gray,sbc=optcolor,ac=gray]{options} the extracted environments are converted to \iext{pdf} -image format and saved in the \sysdir{images} directory using \prgname*{pdflatex} and \pkgname{preview} package. - -\subsection{Options in command line} -\label{sec:optline} - -\ltximg{} provides a \emph{command line interface} with short and long option names. -They may be given before the name of the file. Also, the order of specifying the -options is significant. Certain options accept a list separate by commas, this require a separated by -white space or equals sign \textcolor{red}{\texttt{=}} between option and list and if it's the last option -need \textcolor{red}{\texttt{-\/-}} at the end. Multiple short options can be bundling. - -\DescribeCmd[h]{help}{bolean}{off} -Display a command line help text and exit. - -\DescribeCmd[l]{license}{bolean}{off} -Display a license text and exit. - -\DescribeCmd[v]{version}{bolean}{off} -Display the current version (\fileversion) and exit. - -\DescribeCmd[d]{dpi}{int}{150} -Dots per inch for images files. - -\DescribeCmd[t]{tif}{bolean}{off} -Create a .\iext{tif} images files using \prgname{ghostscript}. - -\DescribeCmd[b]{bmp}{bolean}{off} -Create a .\iext{bmp} images files using \prgname{ghostscript}. - -\DescribeCmd[j]{jpg}{bolean}{off} -Create a .\iext{jpg} images files using \prgname{ghostscript}. - -\DescribeCmd[p]{png}{bolean}{off} -Create a .\iext{png} transparent image files using \prgname{ghostscript}. - -\DescribeCmd[e]{eps}{bolean}{off} -Create a .\iext{eps} image files using \prgname{pdftops}. - -\DescribeCmd[s]{svg}{bolean}{off} -Create a .\iext{svg} image files using \prgname{pdftocairo}. - -\DescribeCmd[P]{ppm}{bolean}{off} -Create a .\iext{ppm} image files using \prgname{pdftoppm}. - -\DescribeCmd[g]{gray}{bolean}{off} -Create a gray scale for all images using \prgname{ghostscript}. The line behind this options is: - -\begin{examplecmd} -[user@machine ~:]§ gs -q -dNOSAFER -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress \ - -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -\end{examplecmd} - -\DescribeCmd[f]{force}{bolean}{off} -Try to capture \lstinline|\psset{...}| and \lstinline|\tikzset{...}| to extract. -When using the \cmdopt{force} option the script will try to capture \lstinline|\psset{...}| or -\lstinline|\tikzset{...}| and leave it inside the \env{preview} environment, any line that is between \lstinline|\psset{...}| and -\lstinline|\begin{pspicture}| or between \lstinline|\tikzset{...}| and \lstinline|\begin{tikzpicture}| will be captured. - -\DescribeCmd[n]{noprew}{bolean}{off} -Create images files without \pkgname{preview} package. The \lstinline|\begin{preview}|\ldots \lstinline|\end{preview}| -lines are only used as delimiters for extracting the content \emph{without} using the package \pkgname{preview}. -Sometimes it is better to use it together with \cmdopt{force}. - -\DescribeCmd[m]{margin}{numeric}{0} -Set margins in bp for \scriptname{pdfcrop}. - -\DescribeCmd[o]{output}{output file name}{empty} -Create \meta{output file name} whit all extracted environments/contents converted to \ics{includegraphics}. -The \meta{output file name} must not contain extension. - -\DescribeCmd{imgdir}{string}{images} -The name of directory for save images and source code. - -\DescribeCmd{zip}{bolean}{off} -Compress only the files generated by the script during the process in \sysdir{images} in \fext{zip} format. -Does not include \meta{output file}. - -\DescribeCmd{tar}{bolean}{off} -Compress only the files generated by the script during the process in \sysdir{images} in \fext{tar.gz} format. -Does not include \meta{output file}. - -\DescribeCmd{verbose}{bolean}{off} -Show verbose information in screen and change \prgopt*{interaction} for compiler. - -\DescribeCmd{srcenv}{bolean}{off} -Create separate files whit \emph{only code} for all extracted environments, is mutually exclusive whit \cmdopt{subenv}. - -\DescribeCmd{subenv}{bolean}{off} -Create sub files whit \emph{preamble} and code for all extracted environments, is mutually exclusive whit \cmdopt{srcenv}. - -\DescribeCmd{arara}{bolean}{off} -Use \prgname*{arara} for compiler files, need to pass \prgopt*{recorder} option to \meta{input file}:\par - -\lstinline|% arara : <compiler> : { options: [-recorder] }| - -\DescribeCmd{xetex}{bolean}{off} -Using \prgname*{xelatex} compiler \meta{input file} and \meta{output file}. - -\DescribeCmd{latex}{bolean}{off} -Using \prgname*{latex}\texttt{\bfseries\guillemotright}\prgname*{dvips}\texttt{\bfseries\guillemotright}\scriptname{ps2pdf} -compiler in \meta{input file} and \prgname*{pdflatex} for \meta{output file}. - -\DescribeCmd{dvips}{bolean}{off} -Using \prgname*{latex}\texttt{\bfseries\guillemotright}\prgname*{dvips}\texttt{\bfseries\guillemotright}\scriptname{ps2pdf} -for compiler \meta{input file} and \meta{output file}. - -\newpage - -\DescribeCmd{dvipdf}{bolean}{off} -Using \prgname*{latex}\texttt{\bfseries\guillemotright}\prgname*{dvipdfmx} for compiler \meta{input file} and \meta{output file}. - -\DescribeCmd{luatex}{bolean}{off} -Using \prgname*{lualatex} for compiler \meta{input file} and \meta{output file}. - -\DescribeCmd{prefix}{string}{fig} -Add prefix append to each files created. - -\DescribeCmd{norun}{bolean}{off} -Run script, but no create images. This option is designed to debug the file and -when you only need to extract the code - -\DescribeCmd{nopdf}{bolean}{off} -Don't create a .\iext{pdf} image files. - -\DescribeCmd{nocrop}{bolean}{off} -Don't run \scriptname{pdfcrop} in image files. - -\DescribeCmd{clean}{doc\textbar pst\textbar tkz\textbar all\textbar off}{doc} -Removes specific content in \meta{output file}. Valid values for this option are: - -\begin{description}[font=\ttfamily, nosep, noitemsep, leftmargin=*] -\item[doc] All content after \lstinline+\end{document}+ is removed. -\item[pst] All \lstinline|\psset{...}| and \pkgname{pstricks} package is removed. -\item[tkz] All \lstinline|\tikzset{...}| is removed. -\item[all] Activates doc, pst and tkz. -\item[off] Deactivate all. -\end{description} - -\DescribeCmd{verbcmd}{command name}{myverb} -Set custom verbatim command \lstinline+\myverb|<code>|+. - -\DescribeCmd{extrenv}{list separate by comma}{empty} -List of environments to extract, need \texttt{-\/-} at end.\par - -\DescribeCmd{skipenv}{list separate by comma}{empty} - -List of environments that should not be extracted and that the script supports -by default, need \texttt{-\/-} at end.\par - -\DescribeCmd{verbenv}{list separate by comma}{empty} - -List of \meta{verbatim standard} environment support, need \texttt{-\/-} at end.\par - -\DescribeCmd{writenv}{list separate by comma}{empty} - -List of \meta{verbatim write} environment support, need \texttt{-\/-} at end.\par - -\DescribeCmd{deltenv}{list separate by comma}{empty} -List of environment deleted in \meta{output file}, need \texttt{-\/-} at end. - -\subsection{Options in input file}\label{sec:optfile} - -Many of the ideas in this section are inspired by the \prgname{arara} program (I adore it). -A very useful way to pass options to the script is to place them in commented -lines at the beginning of the file, very much in the style of \prgname{arara}. - -\DescribeOptFile*{\meta[ac=gray,cf=gray]{argument}}{option one, option two, option three, \ldots} -\DescribeOptFile*{\meta[ac=gray,cf=gray]{argument}}{option one, option two, option three, \ldots}[!] - -The vast majority of the options can be passed into the \meta{input file}. These -should be put at the beginning of the file in commented lines and everything must -be on the same line, the exclamation mark deactivates the option. Valid values for -\meta[ac=gray,cf=gray]{argument} are the following: - -\DescribeOptFile{options}{option one = value, option two = value, option three = value, \ldots} -This line is to indicate to the script which options need to process. - -\DescribeOptFile{extrenv}{environment one, environment two, environment three, \ldots} -This line is to indicate to the script which environments, not supported by -default, are extracted. - -\DescribeOptFile{skipenv}{environment one, environment two, environment three, \ldots} -This line is to indicate to the script which environments, of the ones -supported by default, should not be extracted. - -\DescribeOptFile{verbenv}{environment one, environment two, environment three, \ldots} -This line is to indicate to the script which environments, its considerate a \meta{verbatim standard}. - -\DescribeOptFile{writenv}{environment one, environment two, environment three, \ldots} -This line is to indicate to the script which environments its consider \meta{verbatim write}. - -\DescribeOptFile{deltenv}{environment one, environment two, environment three, \ldots} -This line is to indicate to the script which environments are deleted. - -If you are going to create an \meta{output file} and you do not want these lines to remain, it is better to -place them inside the \lstinline|%<*remove> ... %</remove>|. Like this: - -\begin{examplecode}[numbers=left] -%<*remove> -% ltximg : options : {png,srcenv,xetex} -% ltximg : extrenv : {description} -%</remove> -\end{examplecode} - - -\section{Examples} -\label{sec:examples} - -\subsection{From command line} -\begin{examplecmd} -[user@machine ~:]§ ltximg --latex -s -o test-out test-in.ltx -\end{examplecmd} -Create a \sysdir{images} directory whit all extracted environments converted to image -formats (\iext{pdf}, \iext{svg}) in individual files, an \meta{output file} \sysfile{test-out.ltx} whit all supported environments -converted to \ics{includegraphics} and a single file \sysfile{test-in-fig-all.ltx} with only the extracted environments -using \prgname*{latex}\texttt{\bfseries\guillemotright}\prgname*{dvips}\texttt{\bfseries\guillemotright}\scriptname{ps2pdf} -and \pkgname{preview} package for \meta{input file} and \prgname*{pdflatex} for \meta{output file}. - -\subsection{From input file} -Adding the following lines to the beginning of the file \sysfile{file-in.tex}: - -\begin{examplecode}[numbers=left] -%<*remove> -% ltximg : options : {output = file-out, noprew, imgdir = pics, prefix = env, clean = doc} -% ltximg : skipenv : {tikzpicture} -% ltximg : deltenv : {filecontents} -%</remove> -\end{examplecode} -and run: -\begin{examplecmd} -[user@machine~:]§ ltximg file-in.tex -\end{examplecmd} -Create a \sysdir{pics} directory whit all extracted environments, except \env{tikzpicture}, converted to image -formats (\iext{pdf}) in individual files, an \meta{output file} \sysfile{file-out.tex} whit all extracted environments -converted to \ics{includegraphics} and environment \env{filecontents} removed, a single file \sysfile{test-in-env-all.ltx} -with only the extracted environments using \prgname*{pdflatex} and \pkgname{preview} package for \meta{input file} and \meta{output file}. - -\newpage - -\section{Change history}\label{sec:change:history} - -Some of the notable changes in the history of the \ltximg{} along with the -versions, both development (devp) and public (ctan). - -\setlist[itemize, 1]{label=\textendash, wide=0.5em, nosep, noitemsep, leftmargin=10pt} - -% length for change history -\newlength\descrwidth -\settowidth{\descrwidth}{\textsf{v1.4.5, (ctan), 2013-01-23}} -\begin{description}[font=\small\sffamily, wide=0pt, style=multiline, leftmargin=\descrwidth, nosep, noitemsep] -\item [v\fileversion{} (ctan), \filedate] - \begin{itemize} - \item Add \texttt{scontents} environment support - \item Add \texttt{filecontentsdefmacro} environment support - \item Fix regex in source code - \item Update documentation - \end{itemize} -\item [v1.6 (ctan), 2019-07-13] - \begin{itemize} - \item Add \texttt{zip} and \texttt{tar} options - \item Add new \texttt{Verb} from \texttt{fvextra} - \item Fix and update source code and documentation - \end{itemize} -\item [v1.5 (ctan), 2018-04-12] - \begin{itemize} - \item Use \texttt{GitHub} to control version - \item Rewrite and optimize most part of source code and options - \item Change \texttt{pdf2svg} for \texttt{pdftocairo} - \item Complete support for \texttt{pst-exa} package - \item Escape characters in regex according to \texttt{perl} v5.4x.x - \end{itemize} -\item [v1.4 (devp), 2016-11-29] - \begin{itemize} - \item Remove and rewrite code for regex and system call - \item Add \texttt{arara} compiler, clean and comment code - \item Add \texttt{dvips} and \texttt{dvipdfm(x)} for creation images - \item Add \texttt{bmp}, \texttt{tiff} image format - \end{itemize} -\item [v1.3 (devp), 2016-08-14] - \begin{itemize} - \item Rewrite some part of code (norun, nocrop, clean) - \item Suport \texttt{minted} and \texttt{tcolorbox} package - \item Escape some characters in regex according to \texttt{perl} v5.2x.x - \item All options read from command line and input file - \item Use \texttt{/tmp} dir for work process - \end{itemize} -\item [v1.2 (ctan), 2015-04-22] - \begin{itemize} - \item Remove unused modules - \item Add more image format - \item Fix regex - \end{itemize} -\item [v1.1 (ctan), 2015-04-21] - \begin{itemize} - \item Change \texttt{mogrify} to \texttt{gs} for image formats - \item Create output file - \item Rewrite source code and fix regex - \item Change format date to iso format - \end{itemize} -\item [v1.0 (ctan), 2013-12-01] - \begin{itemize} - \item First public release - \end{itemize} -\end{description} - -\newpage - -\addtocontents{toc}{\protect\setcounter{tocdepth}{2}} -\cleardoublepage -\phantomsection -%\printindex[mydoc] -%\PrintIndex -\printindex -\end{document} -%</documentation> |