Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 2

12 Déc '15, 13:29

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16

Il existe un convertisseur de DVI en SVG. Il s'appelle `dvisvgm`. Pour l'utiliser, il faut utiliser la chaîne de compilation `latex->dvisvgm`. Voici Ci-dessous un exemple de code (`example.tex`) à compiler par les commandes suivantes : * `latex exemple.tex` * `dvisvgm exemple.dvi` Le code: \documentclass{standalone} \usepackage{tikz} \usetikzlibrary{calc,intersections,through,backgrounds,fit} \usepackage{lmodern} \usepackage[T1]{fontenc} \begin{document} \begin{tikzpicture}[thick,help lines/.style={thin,draw=black!50}] \def\A{\textcolor{input}{$A$}} \def\B{\textcolor{input}{$B$}} \def\C{\textcolor{output}{$C$}} \def\D{$D$} \def\E{$E$} \colorlet{input}{blue!80!black} \colorlet{output}{red!70!black} \colorlet{triangle}{orange} \coordinate [label=left:\A] (A) at ($ (0,0) + .1*(rand,rand) $); \coordinate [label=right:\B] (B) at ($ (1.25,0.25) + .1*(rand,rand) $); \draw [input] (A) -- (B); \node [name path=D,help lines,draw,label=left:\D] (D) at (A) [circle through=(B)] {}; \node [name path=E,help lines,draw,label=right:\E] (E) at (B) [circle through=(A)] {}; \path [name intersections={of=D and E,by={[label=above:\C]C}}]; \draw [output] (A) -- (C) -- (B); \foreach \point in {A,B,C} \fill [black,opacity=.5] (\point) circle (2pt); \begin{pgfonlayer}{background} \fill[triangle!80] (A) -- (C) -- (B) -- cycle; \end{pgfonlayer} \node[fit=(current bounding box),inner sep=1mm,draw=lime]{}; \end{tikzpicture} \end{document} Et voici le résultat (converti en PNG par `inkscape` puisqu'on ne peut pas insérer de SVG sur ce site): ![alt text][1] Malheureusement, cette méthode souffre de plusieurs défauts. En particulier concernant l'encodage des textes. Tant que les textes utilisent les caractères de base, tout se passe presque bien (sauf le calcul de la `bounding box` autour des textes). Mais si il y a une ligature ou des éléments mathématiques, l'encodage ne suit plus (je soupçonne que cela provient du fait que la police utilisée n'est pas intégrée au document SVG). La documentation de TikZ/PGF suggère d'utiliser le driver `pgfsys-dvisvgm` (via `\def\pgfsysdriver{pgfsys-dvisvgm.def}`) mais ça marche encore moins. [1]: http://texnique.fr:80/osqa/upfiles/tikz-to-svg-simple-test.svg.png
cliquez ici pour masquer/afficher la révision 1

12 Déc '15, 13:28

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16

Il existe un convertisseur de DVI en SVG. Il s'appelle `dvisvgm`. Pour l'utiliser, il faut utiliser la chaîne de compilation `latex->dvisvgm`. Voici un exemple de code: \documentclass{standalone} \usepackage{tikz} \usetikzlibrary{calc,intersections,through,backgrounds,fit} \usepackage{lmodern} \usepackage[T1]{fontenc} \begin{document} \begin{tikzpicture}[thick,help lines/.style={thin,draw=black!50}] \def\A{\textcolor{input}{$A$}} \def\B{\textcolor{input}{$B$}} \def\C{\textcolor{output}{$C$}} \def\D{$D$} \def\E{$E$} \colorlet{input}{blue!80!black} \colorlet{output}{red!70!black} \colorlet{triangle}{orange} \coordinate [label=left:\A] (A) at ($ (0,0) + .1*(rand,rand) $); \coordinate [label=right:\B] (B) at ($ (1.25,0.25) + .1*(rand,rand) $); \draw [input] (A) -- (B); \node [name path=D,help lines,draw,label=left:\D] (D) at (A) [circle through=(B)] {}; \node [name path=E,help lines,draw,label=right:\E] (E) at (B) [circle through=(A)] {}; \path [name intersections={of=D and E,by={[label=above:\C]C}}]; \draw [output] (A) -- (C) -- (B); \foreach \point in {A,B,C} \fill [black,opacity=.5] (\point) circle (2pt); \begin{pgfonlayer}{background} \fill[triangle!80] (A) -- (C) -- (B) -- cycle; \end{pgfonlayer} \node[fit=(current bounding box),inner sep=1mm,draw=lime]{}; \end{tikzpicture} \end{document} Et voici le résultat (converti en PNG par `inkscape` puisqu'on ne peut pas insérer de SVG sur ce site): ![alt text][1] Malheureusement, cette méthode souffre de plusieurs défauts. En particulier concernant l'encodage des textes. Tant que les textes utilisent les caractères de base, tout se passe presque bien (sauf le calcul de la `bounding box` autour des textes). Mais si il y a une ligature ou des éléments mathématiques, l'encodage ne suit plus (je soupçonne que cela provient du fait que la police utilisée n'est pas intégrée au document SVG). La documentation de TikZ/PGF suggère d'utiliser le driver `pgfsys-dvisvgm` (via `\def\pgfsysdriver{pgfsys-dvisvgm.def}`) mais ça marche encore moins. [1]: http://texnique.fr:80/osqa/upfiles/tikz-to-svg-simple-test.svg.png