This siteAll blogsLe 17ClémentCCBCuisineLe 3ContactSe connecterS'inscrire
  • All blogs
  • Le 17
  • Clément
  • CCB
  • Cuisine
  • Le 3
  • Contact

  • S'inscrire

Recettes informatiques

  • Page de garde
  • Contact
  • Se connecter
  • « Fichier de ressource Bash
  • Autoconnection »

Convertiseur Fig -> LaTeX -> EPS

Posted by mazet on 14 Nov 2009 in Programmation, Bash

Script convertissant un fichier au format EPS à partir d'un fichier FIG (xfig). On appelle LaTeX pour convertir les chaines de caractères qui contiennent des commandes LaTeX.

Shell

#!/bin/sh
# genfig (C) Marc de Courville 20 aout 1994
#            Laurent Mazet 26 janvier 1999
#            Cyril Humbert 14 stemptre 1999
#            Laurent Mazet 5 octobre 1999
#            Marc de Courville and Laurent Mazet 16 octobre 2000
#            Laurent Mazet 22 novembre 2001
 
# Fabrique un fichier au format eps a partir d'un fichier xfig (FIG).
# On appelle LaTeX pour convertir les chaines de caracteres qui
# contiennent des commandes LaTeX.
 
# 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 2, 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.
 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
# Changelog:
# - 1.10.0
#   * work also on cygwin
# ...
 
 
# Lecture des parametres
 
VERSION="1.10.0"
 
help=no
list="";
level=1000;
resource=""
showversion=no
incstdres=yes
 
while [ $# -gt 0 ]; do
  case $1 in
    -h)
      help="yes"
      ;;
    -m)
      shift
      level="$1"
      ;;
    -m*)
      level=$(echo $1 | sed -e 's/^-m//')
      ;;
    -r)
      shift
      resource="$resource $1"
      ;;
    -r*)
      resource="$resource $(echo $1 | sed -e 's/^-r//')"
      ;;
    -v)
      echo "$(basename "$0") version $VERSION" >&2; exit 1;
      ;;
    -x)
      incstdres=no
      ;;
    *)
      list="$list $1"
  esac
  shift
done
 
# Verification des parametres
 
level=$(echo $level | sed -e 's/[^0-9]*\([0-9]*\).*/0\1/')
[ $level -eq 0 ] &&
  { echo "$level is an incorrect magnification level." >&2; exit 1; }
 
checked_res=""
[ -n "$resource" ] &&
  for file_res in $resource; do
    [ ! -f $file_res ] &&
      { echo "Resource file $file_res not found." >&2; exit 1; }
    [ -z "$(echo $file_res | grep '^[~/]')" ] &&
      file_res="$(pwd)/$file_res"
    checked_res="$file_res $checked_res"
  done
resource=$checked_res
 
[ \( "$incstdres" = "yes" \) -a  \( -f $HOME/.$(basename "$0")rc \) ] &&
  resource="$HOME/.$(basename "$0")rc $resource"
 
[ \( -z "$list" \) -o  \( "$help" = yes \) ] &&
  { echo "
 Usage: $(basename "$0") [-h] [-m level] [-r resource]  <file[.fig]>...
 
-h            display help (this page)
-m level      set magnification level. A value of 1000 corresponds to
              100% and the scale is linear. Default value is [1000]. 
-r resource   specifies the name of a resource file which contains TeX macros.
          TeX macro must be one line to allow multiple resource files.
              By deault, it tries to open ~/.$(basename "$0")rc
-v            show version.
-x            exclude standard resource file.
 
 
<file1> <ile2>... figure's name
 
  generate the postcript file <filename>.eps to be included as
  a figure in the latex file with graphics.cls
 
  This script allows to generate a postscript figure created by xfig containing
  text to be processed by latex. Fonts are scaled properly.
  The fonts to be used in xfig are the latex fonts.
  It is convinient to use the alias lafig for calling xfig:
    alias lafig 'xfig -specialtext -latexfonts -startlatexFont default'
" >&2; exit 1; }
 
# Le repertoire ou on ecrit les fichiers temporaires.
# On recherche un nom de repertoire dans la variable d'environnement TMP,
# si elle n'est pas definie, on regarde dans TEMP, si cette derniere
# n'existe pas non plus, on utilise /tmp .
TMP=${TMP:=$TEMP}
TMP=${TMP:=/tmp}
[ \( -d $TMP \) -a \( -w $TMP \) ] ||
  { echo "$TMP must be a writable directory" >&2; exit 1; }
 
# Les fichiers temporaires (chemin d'acces relatif a $TMP).
prefixe=$(basename "$0")-$$
dvi_file=$prefixe.dvi
eps_file=$prefixe.eps
latex_file=$prefixe.tex
pstex_file=$prefixe.pstex
pstex_t_file=$prefixe.pstex_t
trap "rm -f $TMP/$prefixe*; cd $OLDPWD; exit 1;" 0 1 2 15
 
# Version de dvips
if [ $(dvips -v | cut -d" " -f4 | tr '.[:alpha:]' ' ' | sed -e "s, ,,g") -gt 570 ]; then
   dvi_v="cool"
else
   dvi_v="ugly"
fi
 
# Pour chaque fichier passe en argument...
for fig_file in $list; do
 
  name=$(basename "$fig_file" .fig)    # sans extension ni chemin d'acc
  dir=$(dirname "$fig_file")
  fig_file=$name.fig
 
  # Si le fichier n'existe pas ou s'il n'est pas au format FIG,
  # on passe au suivant.
  [ ! -f $dir/$fig_file ] && 
    { echo "Skipping \"$fig_file\" (file not found)..." >&2; continue; }
 
  head -1 "$dir/$fig_file" | grep -q "#FIG" ||
    { echo "Skipping \"$fig_file\" (not a FIG file)..." >&2; continue; }
 
  # Fabrique les fichiers pstex et pstex_t a l'aide de fig2dev
  echo -n "Processing \"$fig_file\": "
 
  if [ "$dvi_v" = "cool" ]; then
     fig2dev -L pstex -n "$name" "$dir/$fig_file" $TMP/$pstex_file &&
     fig2dev -L pstex_t -p $pstex_file "$dir/$fig_file" $TMP/$pstex_t_file ||
     { echo "Error while creating pstex and/or pstex_t files" >&2; continue; }
  else
     fig2dev -L pstex -n "$name" "$dir/$fig_file" $TMP/$pstex_file &&
     fig2dev -L pstex_t "$dir/$fig_file" $TMP/$pstex_t_file ||
     { echo "Error while creating pstex and/or pstex_t files" >&2; continue; }
  fi
 
  cd $TMP
 
  # Cree un petit fichier LaTeX qui inclue l'image
  cat >$latex_file <<EOF
    \documentclass{article}
    
    \usepackage{pslatex}
    \usepackage{times}
    \usepackage[T1]{fontenc}
    \usepackage{amsmath}
    \usepackage{amstext}
    \usepackage{amsfonts}
    \usepackage{amssymb}
    \usepackage[mathscr]{eucal}
    \usepackage{bbm}
    \usepackage[dvips]{color}
    \usepackage[dvips]{epsfig}
EOF
 
  # Ajout de macro standards
 
  [ -n "$resource" ] &&
    { ( for fil_res in $resource; do
          cat $fil_res;
        done ) | sort | uniq >>$latex_file; }
  
  # Fin du fichier LaTeX
 
  if [ "$dvi_v" = "cool" ]; then
    cat >>$latex_file <<EOF
      \setlength{\textheight}{100cm}
      \setlength{\textwidth}{100cm}
      \setlength{\oddsidemargin}{-0pt}
      \setlength{\evensidemargin}{-0pt}
      \setlength{\topmargin}{-0pt}
      \setlength{\parindent}{0pt}
      \pagestyle{empty}
 
      \begin{document}
      \begin{center}
      \input{$pstex_t_file}
      \end{center}
      \end{document}
EOF
  else
    cat >>$latex_file >>EOF
      \setlength{\textheight}{100cm}
      \setlength{\textwidth}{100cm}
      \setlength{\oddsidemargin}{-0pt}
      \setlength{\evensidemargin}{-0pt}
      \setlength{\topmargin}{-0pt}
      \setlength{\parindent}{0pt}
 
      \pagestyle{empty}
 
      \begin{document}
      \makebox[0pt][l]{\color[rgb]{1,1,1}.}\par
      \mbox{\begin{picture}(0,0)
      \epsfig{file=$pstex_file}
      \end{picture}
      \input{$pstex_t_file}
      \hspace{-10pt}\makebox[0pt][l]{\color[rgb]{1,1,1}.}
      \end{document}
EOF
  fi
 #
 ### Ne rien changer dans la ligne `EOF' (indentation, espaces...)
 
  echo -n "LaTeX, "
  latex 2>&1 "\nonstopmode\input{$latex_file}" 1>/dev/null 2>&1 ||
    { cat $prefixe.log >&2; continue; }
 
  echo -n "dvips "
  dvips -Pwww -q -x $level -E $dvi_file -o $eps_file 1>/dev/null 2>&1
  
  # retaille l'image eps et recale l'image au bord de la page
  
  bbox=$(grep '^%%BoundingBox:' $eps_file | head -1 |
         awk '{printf "0 0 %d %d", $4-$2, $5-$3;}')
  epsffit $bbox $eps_file $eps_file.tmp
  mv $eps_file.tmp $eps_file
 
  # recopie le fichier eps dans le repertoire courant
  # apres avoir change le titre de la figure (%%Title).
  if [ -s $eps_file ]; then
    cd $OLDPWD
    cat $TMP/$eps_file |
    sed 's/^\(%%Title: \).*/\1'"$name"'/1' > "$name".eps
   
    # $name ne doit pas contenir le caractere `/' !
 
    echo "-> \"$name.eps\""
  fi
 
  # un peu de menage avant de passer au fichier suivant
  rm -f $TMP/$prefixe* 2>/dev/null
 
done
 
# Fin de genfig
This entry was posted by mazet and filed under Programmation, Bash.

Aucun commentaire pour le moment

Catégories

  • Toutes
  • Non catégorisé
  • Programmation
    • Awk
    • Bash
    • C
    • C++
    • Javascript
    • LaTeX
    • Perl
    • Tcl/Tk
  • Systeme
    • Android
    • Debian
    • Ubuntu

Contenu

  • Linux Router
  • Creating a network between 2 virtual machines on Windows with Qemu
  • Build a Debian package for pdmenu
  • Extract informations from epub file
  • Connexion PostgreSql / Java par Socket Unix
  • Example of fork and respawn
  • Start SSH daemon on Git portable distribution
  • Create a git mirror
  • Color diff
  • Create on Debian a Minecraft server
  • GIT/HG/SVN on multiple repos simultaneously
  • Convert Comics into CBZ format
  • Random password generator function
  • Convert to camelCase
  • DKIM and SPF
  • Migration from BackupPC 3 (Debian package) to BackupPC 4 (Standalone Installation)
  • Minimal BC for Mingw
  • Diskless Debian cluster
  • Colorize log file
  • Generate certificates with (or without) a certificate authority
Février 2026
Lun Mar Mer Jeu Ven Sam Dim
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  
 << <   > >>
  • Accueil
  • Récemment
  • Archives
  • Catégories
  • Derniers commentaires

Rechercher

Flux XML

  • RSS 2.0: Posts
  • Atom: Posts
What is RSS?

©2026 by Laurent Mazet • Contact • Aide • Open-source blog

Social CMS software

Cookies are required to enable core site functionality.