AW:[Tustep-Liste] PS-Zeichensatz installieren

Heinz Werner Kramski kramski at dla-marbach.de
Fr Mai 13 12:02:12 CEST 2005


Lieber Herr Meyer,

wir kopieren hier zusätzliche PS-Schriften (unter Windows) auf ein
Verzeichnis im Netz mit folgender Struktur:

   Y:\psfonts\*.pfb
   Y:\psfonts\fontinfo\*.inf
   Y:\psfonts\pfm\*.pfm
   Y:\psfonts\afm\*.afm

GSView besitzt folgende Einstellungen:
   Optionen/Konfiguriere Ghostscript.../Ghostscript-Optionen:
      -dNOPLATFONTS -sFONTPATH=c:\psfonts;y:\psfonts

Damit klappt es auch, ohne Schriftenlisten zu aktualisieren - unter
Linux müsste das ähnlich möglich sein.

Das Verzeichnis Y:\psfonts wird gleichzeitig unter Unix als
/lan/netappl/psfonts zum temporären Laden der Schriften in Drucker
verwendet. Dafür haben Sie ja schon eine einfache Lösung, aber ich
füge unser Shell-Script "loadfont" trotzdem mal bei, vielleicht können
Sie es gebrauchen (das Tool t1ascii wird ebenfalls benötigt). Das
Script kann optional auch eine Zeichentabelle ausgeben, inkl. der
nicht-codierten Zeichen (das geht wohl über *psdickten hinaus).

Viele Grüße
   Heinz Werner Kramski

---------------------------------------------------------------------
Heinz Werner Kramski              Heinz.Werner.Kramski at dla-marbach.de
Deutsches Literaturarchiv                   Telefon: +49 7144/848-140
Schillerhöhe 8-10                               Fax: +49 7144/848-191
D-71672 Marbach                             http://www.dla-marbach.de
--------------------------------------------------------------------- 




> Diskussionsforum Tustep-Liste
> Weitere Informationen: www.itug.de
> ------------------------------------------------------------
> 
> Liebe Tustep-Gemeinschaft,
> 
> ich habe hier einen Postscript-Zeichensatz ("Quadraat") mit den
benötigten 
> Schnitten (recte, kursiv, etc.) in jeweils einer .afm und
.pfb-Datei.
> 
> Es ist mir gelungen, die .afm-Dateien mit *PSFONT zu bearbeiten und
die 
> Dicktenwerte in einer Datei aufzuheben. Das Satzprogramm scheint
diese auch 
> zu erkennen, aber der letzte Schritt will mir nicht gelingen: *PSAUS
gibt 
> immer nur Seiten des Inhalts "Die nötige Schrift QUADRAAT-Regular
ist auf dem 
> Gerät nicht installiert" aus.
> 
> Mir ist im Prinzip klar, daß zur Einbettung in die PS-Datei
eigentlich 
> die .pdb-Dateien nötig sind. Was muß ich mit diesen tun?
> 
> Ich habe versucht, sie in das "fonts"-Verzeichnis von ghostscript zu
kopieren 
> - ohne Erfolg. Außerdem müsste es doch möglich sein, eigene
Schriften auch 
> als Nicht-Administrator zu verwenden!
> 
> Jede Hilfe ist sehr willkommen; das System ist Suse-Linux 9.2.
> 
> Schon jetzt vielen Dank und herzliche Grüße,
> 
> 
> Thomas Meyer
> 
> ------------------------------------------------------------
> Tustep-Liste at itug.de
> https://lists.uni-wuerzburg.de/mailman/listinfo/tustep-liste
-------------- nächster Teil --------------
#!/bin/ksh
#---------------------------------------------------------------------
#               (c) Deutsches Literaturarchiv Marbach
#---------------------------------------------------------------------
#      $Source: /usr/local/bin/RCS/loadfont,v $
#          $Id: loadfont,v 1.3 2005/01/21 15:16:53 root Exp $
#       Aufruf: siehe unten
#    Parameter: siehe unten
#        Zweck: binaere Postscript-Fonts resident in Drucker laden
#     Umgebung: Digital-Unix
#   Siehe auch: "man t1ascii"
#  Bemerkungen: Erwartet wird folgende Dateikonvention:
#                  $PSFONTS/afm/*.afm - Adobe Font Metrics
#                  $PSFONTS/*.pfb     - binaere Postscript-Fonts
#               Da die PS-Fonts unter Windows installiert werden,
#               ist EOL in *.afm CRLF. Dies muss ggf. bei der Angabe von
#               egrep-Pattern beachtet werden: "loadfont Bembo$" etwa
#               findet nichts; "loadfont Bembo.$" ist korrekt und
#               beruecksichtigt das CR am Zeilenende.           
#---------------------------------------------------------------------
# $Log: loadfont,v $
# Revision 1.3  2005/01/21 15:16:53  root
# Neuer Parameter --showfont zur Ausgabe einer Zeichentabelle (inkl. nicht-codierter Zeichen)
#
# Revision 1.2  2005/01/17 10:33:27  kramski
# Parameter eingefuehrt, insbesondere fuer den Printer, damit BeFi auch seinen Drucker benutzen kann.
#
# Revision 1.1  1998/02/23 10:26:57  kramski
# Initial revision
#
#---------------------------------------------------------------------
set -u +x
Me=${0##*/}
Rev='$Revision: 1.3 $'
                            # Konstanten
OutFile=/var/tmp/loadfont.ps

                            # Defaults (durch Parameter aenderbar)
FontName="Bembo*"
FontDir=/lan/netappl/psfonts
Printer=lp0
Mode_ShowFont=""            # "" ist false, "y" ist true

Zweck="\
Dies ist $Me $Rev, (c) Heinz.Werner.Kramski at dla-marbach.de.

$Me laedt einen oder mehrere binaere Postscript-Fonts resident in einen
Drucker, meist als Vorbereitung fuer die Satzausgabe mit TUSTEP.

Es kann dabei auch eine vollstaendige Zeichentabelle ausgeben.
"

Aufruf="\
Aufruf: $Me fontname [optionen]
   fontname:             # Schriftname (FontName) lt. .afm-Datei,
                         # ggf. inkl. Wildcards (Default: $FontName) 
   optionen:
       --fontdir path    # Fontverzeichnis (Default: $FontDir)
       --printer printer # Unix-Druckername (Default: $Printer)
       --showfont        # Vollstaendige Zeichentabelle des Fonts ausdrucken 
       --help            # Diese Hilfe anzeigen.
"


# ---------------------------------------------------------------------
# Parameter auswerten
# ---------------------------------------------------------------------

while [ $# -gt 0 ]
  do
  case "$1" in
      --fontdir)
	  shift
	  case "$1" in
	      /*)
		  FontDir="$1"
		  ;;
	      *)
		  echo "$Me: --fontdir erfordert einen absoluten Pfad als Argument!"
		  echo "$Aufruf"
		  exit 1
		  ;;
	  esac
	  ;;
      --printer)
	  shift
	  case "$1" in
	      lp0|lp22)
		  Printer=$1
		  ;;
	      *)
		  echo "$Me: Ungueltiger Druckername \"$1\"!"
		  echo "$Aufruf"
		  exit 1
		  ;;
	  esac
	  ;;
      --showfont)
	  Mode_ShowFont="y"
	  ;;
      --help)
	  echo "$Zweck"
	  echo "$Aufruf"
	  exit 1
	  ;;
      -*)
	  echo "$0: Ungueltiger Parameter \"$1\"!"
	  echo "$Aufruf"
	  exit 1
	  ;;
      *)
	  FontName=$1
	  ;;
  esac
  shift
done

                               # Passende Fonts suchen:
echo "$Me: Lade Fonts:"

/usr/bin/egrep -l "^FontName $FontName" $FontDir/afm/*.afm | while read FileName

  do                           # fuer jeden passenden Font
                               # Fontnamen ermitteln:
  /usr/bin/cat $FileName | /usr/bin/ud -u | /usr/bin/grep "^FontName" | read DUMMY FontName
  FontFile=`basename $FileName`
  FontFile=`echo $FontFile | /usr/bin/cut -d"." -f1`
  FontFile=$FontFile.pfb
  echo "   " $FontName $FontFile ${Mode_ShowFont:+"(Zeichentabelle wird gedruckt)"}

                             # PS-Header fuer residentes Laden erzeugen
  echo "%!PS-Adobe-2.0 ExitServer                                 "   > $OutFile
  echo "%%BeginExitServer: 0                                      "  >> $OutFile
  echo "serverdict begin 0 exitserver                             "  >> $OutFile
  echo "%%EndExitServer                                           "  >> $OutFile
  echo "% Test for existence of font, abort if present.           "  >> $OutFile
  echo "% This won't work on a printer with a hard disk!          "  >> $OutFile
  echo "/str 32 string def                                        "  >> $OutFile
  echo "% Actual font name is substituted here:                   "  >> $OutFile
  echo "/$FontName dup FontDirectory exch known                   "  >> $OutFile
  echo "{ str cvs print ( is already loaded!\n) print flush quit }"  >> $OutFile
  echo "{ (loading font ) print str cvs print (\n) print flush }  "  >> $OutFile
  echo "ifelse                                                    "  >> $OutFile
  echo "%% Font follows...                                        "  >> $OutFile

                             # binaeren Font in *.pfa-Format umwandeln
  /usr/bin/cat $FontDir/$FontFile | /usr/local/bin/t1ascii 2> /dev/null >> $OutFile

  echo "%%EOF"  >> $OutFile

                             # Fonts laden:
  /usr/bin/lpr -P $Printer $OutFile

                            # ggf. Zeichentabelle ausgeben:
  if [ "$Mode_ShowFont" ]
  then
     /usr/bin/lpr -P $Printer <<EOF
%!
%%Creator: Eric Gisin <egisin at waterloo.csnet>
%%Title: Print font catalog
% Copyright (c) 1986 Eric Gisin
% Copyright (C) 1992 Aladdin Enterprises, Menlo Park, CA (ghost at aladdin.com)
%   Modified to print all 256 encoded characters.
% Copyright (C) 1993 Aladdin Enterprises, Menlo Park, CA (ghost at aladdin.com)
%   Modified to print unencoded characters.
% Copyright (C) 1994 Aladdin Enterprises, Menlo Park, CA (ghost at aladdin.com)
%   Modified to always create 256-element Encoding vectors.
% Copyright (C) 1995 Aladdin Enterprises, Menlo Park, CA (ghost at aladdin.com)
%   Modified to print more than 128 unencoded characters.

% Example usages at bottom of file

/#copies 1 def
/min { 2 copy gt { exch } if pop } bind def

/T6 /$FontName findfont 6 scalefont def
/Temp 64 string def
/Inch {72 mul} def
/Base 16 def	% char code output base
/TempEncoding [ 256 { /.notdef } repeat ] def

% do single character of page
% output to rectangle ll=(0,-24) ur=(36,24)
/DoChar {
  /C exch def
  /S (_) dup 0 C put def
  /N F /Encoding get C get def

  % print code name, width and char name
  /W F setfont S stringwidth pop def
  T6 setfont
  N /.notdef ne {0 -20 moveto N Temp cvs show} if
  0 -12 moveto C Base Temp cvrs show (  ) show
  W 0.0005 add Temp cvs 0 5 getinterval show

  % print char with reference lines
  N /.notdef ne {
    3 0 translate
    0 0 moveto F24 setfont N glyphshow
    /W S stringwidth pop def
    0 -6 moveto 0 24 lineto
    W -6 moveto W 24 lineto
    -3 0 moveto W 3 add 0 lineto
    0 setlinewidth stroke
  } if
} def

% print page title
/DoTitle {
  /Times-Roman findfont 18 scalefont setfont
  18 10.5 Inch moveto FName Temp cvs show ( ) show ((24 point)) show
} def

% print one block of characters
/DoBlock {	% firstcode lastcode
  /FirstCode 2 index def
  1 exch {
    /I exch def
    /Xn I FirstCode sub 16 mod def /Yn I FirstCode sub 16 idiv def
    gsave
    Xn 36 mul 9 add Yn -56 mul 9.5 Inch add translate
    I DoChar
    grestore
  } for
} def

% print a line of character
/DoLine {	% firstcode lastcode
  1 exch { (_) dup 0 3 index put show pop } for
} def

% print font sample page
/DoFont {
  /FName exch def	% font name
  /F FName findfont def
  /F24 F 24 scalefont def
  /Line0 96 string def
  /Line1 96 string def

	% Display the first 128 encoded characters.

  DoTitle (, characters 0-127) show
  0 127 DoBlock
  F 10 scalefont setfont
  18 2.0 Inch moveto 0 63 DoLine
  18 1.5 Inch moveto 64 127 DoLine
  showpage

	% Display the second 128 encoded characters.

  DoTitle (, characters 128-255) show
  128 255 DoBlock
  F 10 scalefont setfont
  18 2.0 Inch moveto 128 191 DoLine
  18 1.5 Inch moveto 192 255 DoLine
  showpage

  F /FontType get 1 eq
   {
		% Find and display the unencoded characters.

	/Encoded F /Encoding get length dict def
	F /Encoding get { true Encoded 3 1 roll put } forall
	/Unencoded [ F /CharStrings get
	 { pop dup Encoded exch known { pop } if }
	forall ] def
	/Count Unencoded length def

		% Print the unencoded characters in blocks of 128.

	0 128 Unencoded length 1 sub
	 { dup 128 add Unencoded length min 1 index sub
	   Unencoded 3 1 roll getinterval TempEncoding copy
	   /BlockEncoding exch def
	   /BlockCount BlockEncoding length def
	   save
	   F length dict F
	    { 1 index /FID eq { pop pop } { 2 index 3 1 roll put } ifelse }
	   forall dup /Encoding TempEncoding put
	   /* exch definefont
	   /F exch def
	   /F24 F 24 scalefont def

	   DoTitle (, unencoded characters) show
	   0 BlockCount 1 sub DoBlock
	   F 10 scalefont setfont
	   18 2.0 Inch moveto 0 BlockCount 64 min 1 sub DoLine
	   BlockCount 64 gt
	    { 18 1.5 Inch moveto 64 BlockCount 128 min 1 sub DoLine
	    }
	   if
	   showpage
	   restore
	 } for

   }
  if

} def

% Do font samples
% /Times-Roman DoFont			% Test (less than a minute)
/$FontName DoFont
% /Hershey-Gothic-English DoFont	% Test (8 minutes)

% Do a complete catalog
% FontDirectory {pop DoFont} forall	% All fonts (quite a long time)

EOF

  fi  # --showfont
done  # fuer jeden passenden Font                         

if [ -e $OutFile ]
then
   /usr/bin/rm $OutFile
fi


Mehr Informationen über die Mailingliste Tustep-Liste