lout-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: use windows fonts and adobe distiller and lout


From: douglas mcallaster
Subject: Re: use windows fonts and adobe distiller and lout
Date: Fri, 31 Jan 2020 17:06:33 -0500

Thanks, Guys;

The  TTF2AFM.exe created an afm file, which Lout used, and then distiller rendered
Thus, perfect solution found, all on Windows, and no type 1 fonts needed.

Ttf2afm is by Han The Thanh, the author of pdfTex. 
I got the exe from the MikTex distribution.
(I had used Tex and LaTex years ago but even the basic distro has 8K files; it is a beast.
The full distro from Tex User Group has over 100K files!!)

The ttf2afm is described in a TUG boat 2009 article entitled 'A closer look at TrueType fonts and pdfTex'
The only trick was applying an encoding option in its usage; else the afm files had -1 index for the glyphs; and the afms provided with Lout had a decimal code for the glyphs.
Not all the TT fonts I tried worked, though; the newer ones did not seem to recode correctly. Thanh discusses some of this in his article but I did not really follow it.

PS: I may still work on using Martin's shell script and investigate whether distiller can use type1 fonts and examine the quality.
I do have a Linux Mint pc; and have used it for poking around.
I tried briefly last night but got an error message about no GS_fontpath (as I recall) even though put the ttf font in a path GS searches.
but no time to work on this again for a week at least. 

Lout is truly a wonderful gift. Many thanks to Professor Kingston for such a robust program.

Doug

On Fri, Jan 31, 2020 at 1:31 AM William Bader <address@hidden> wrote:
I think that Lout needs only the AFM, so just to run Lout, you can probably get by without converting the fonts.
An alternative to ttf2pt1 is converting the font file through a file conversion web site like http://www.freefontconverter.com/ (which probably runs ttf2pt1 underneath).
Regards, William


From: Lout-users <lout-users-bounces+williambader=address@hidden> on behalf of Martin Michel <address@hidden>
Sent: Thursday, January 30, 2020 3:44 PM
To: douglas mcallaster <address@hidden>
Cc: address@hidden <address@hidden>
Subject: Re: use windows fonts and adobe distiller and lout
 
Hey Doug,

author of the script here. William and David already explained the idea
of the script very well, I have not much to add. It is basically a
wrapper around ttf2pt1 which automates the whole chain of preparation
for using a TTF/OTF font within Lout. The Readme on GitHub [1] gives
some more details, but you know it probably already.

I used the script successful on MacOS and Linux but have no experience
with it on Windows. To directly use it, you could try to install Cygwin
[2] or MSYS2 [3], install the required programs and follow the steps
from the Readme. The dependencies are a bunch of GNU Unix/Linux tools
which should come out-of-the box in Cygwin (bash, sed, grep, tee, ...) and
the ttf2pt1 program [4]. Compilation requires specific development
headers, e.g. Freetype 2 [5] and build essential tools like make and
gcc.  Although all those resource should be accessible by Cygwin's
package system, I have to admit, this is not an easy path if you are
completely new to GNU/Linux/Unix. To cut a long story short, I cannot
guarantee it will work this way but if you are ambitious and eager to
learn something new, just give it a try. (Alternatively, you could
install a Linux VM using Virtualbox [6] but this would make your task
even bigger…)

If there is another, easier way (Windows or Linux), I would be also very
happy to learn about it from the community.

−Martin

[1] https://github.com/smartmic/addfonts
[2] https://www.cygwin.com/
[3] https://www.msys2.org/
[4] http://ttf2pt1.sourceforge.net/
[5] https://www.freetype.org/
[6] https://www.virtualbox.org/


On Tue, Jan 28, 2020 at 05:33:49PM -0500, douglas mcallaster wrote:
> Folks,
>
> Can lout use the truetype fonts which come with Windows 10?
> (And I am using Adobe Distiller to make pdf from the lout generated postscript.)
>
> I found an explanation for using non standard fonts from 20 years ago (using PFA or PFB and AFM files),
> but I assume truetype fonts would provide much higher quality.
>
> I discovered (on git hub) a script from Martin Michel from 2014 but it is for Linux and ghostscript.
> Has someone made a Windows powershell script which could perform this magic for me?
>
> Or perhaps someone could explain the script (copied next under) so that I could try to its steps manually.
>  
> As I understand it, I would have to set up lout to find the AFM file via a myfonts.ld file.
>
> If someone could reply with the requisite (I assume) AFM file (based on some Windows10 truetype font),
> and a myfonts.ld file (with the correct matching @name, @family, @face, @tag, @metrics, @mapping info)
> what would be really great. (An early success would keep me going, as I have a day job.)
>
> Also, if folks have done this and can suggest a nice Windows Monospace, Serif, and San Serif font, I welcome it.
>
> Finally, my thoughts go out to Dr Kingston, who enjoyed hiking in Australia,
> as I wonder how much of his treasured woodlands are now destroyed.
>
> Thanks, Doug
>
> #!/bin/bash
> #
> # addfonts.sh
> # Converts True Type or Open Type Fonts to Postscript Type1 Fonts and populates
> # the Ghostscript Fontmap file and the Basser Lout FontDef databases for local
> # users.
> #
> # Depends on non-standard commands: ttfpt1 (compiled against Freetype)
> #
> #
> # Copyright 2014 Martin Michel
> #
> #   Licensed under the Apache License, Version 2.0 (the "License"); you may not
> #   use this file except in compliance with the License.  You may obtain a copy
> #   of the License at
> #
> #     http://www.apache.org/licenses/LICENSE-2.0
> #
> #   Unless required by applicable law or agreed to in writing, software
> #   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> #   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
> #   License for the specific language governing permissions and limitations
> #   under the License.
>    
> shfile=$(sed 's/^.*\///' <<< $0)
> logfile=$(sed -e 's/\.sh/\.log/; s/^.*\///' <<< $0)
> #echo $0 $shfile $logfile
>
> usage="Usage: ./$shfile
> No arguments applicable. This script scans for new True Type or Open Type Font
> files, converts them to Postscript Type1 Fonts and updates the Fontmap
> (Ghostscript) and @FontDef (Lout) databases. The script and all associated input
> and output files must be in the local user ghostscript font path."
>
> echo "*****************************************************************"\
>    >>$logfile
> echo "LOG ENTRY from '$shfile'">>$logfile
> echo -e "Run by $USER on $HOSTNAME at $(date) \n ">>$logfile
>
> if [ $# -gt 0 ] ; then
>     echo -e "TERMINATION: Wrong number of arguments. \n" |tee -a $logfile
>     echo -e "$usage\n"
>     exit 1
> fi
>
> if [[ "$GS_FONTPATH" != "$(pwd)" ]] ; then
>     echo -e "TERMINATION: Wrong working directory or GS_FONTPATH not set.\n" |tee -a $logfile
>     echo -e "Current directory: $(pwd)" |tee -a $logfile
>     echo -e "GS_FONTPATH: $GS_FONTPATH" |tee -a $logfile
>     echo -e "$usage\n"
>     exit 2
> fi
>
> [ ! -f Fontmap ] && echo -e "INFO: Ghostscripts local 'Fontmap' file missing, will
> be created.\n" |tee -a $logfile  && touch Fontmap
>
> ls *.[oOtT][tT][fF] 2>/dev/null 1>&2
> if [ $? -ne 0 ] ; then
>     echo -e "TERMINATION: No True or Open Type Font files (.ttf,.otf) in directory." |tee -a $logfile
>     echo -e "$usage\n"
>     exit 3
> fi
>
> availableTTF=( $(ls -1 *.[oOtT][tT][fF] | sed 's/\.otf\|\.ttf//i') )
> installedPFB=( $(grep -e '^/' Fontmap | sed 's/^.*(\|\.pfb.*$//g') )
>
> typeset -i counter
> typeset -i numTTF
> typeset -i numInstalled
> typeset -i numPFB
> numTTF=${#availableTTF[*]}
> numInstalled=${#installedPFB[*]}
> counter=$numInstalled
> numPT1=$(ls -1 *.[aApP][fF][bBmM] 2>/dev/null | wc -l )
>
> let z=numPT1/2
> let m=numPT1%2
>
> if (( $numInstalled < z && m == 0 )) ; then
>     echo -e "WARNING: There are unregistered PS Type1 font files.\n" |tee -a $logfile
> elif (( $numInstalled > z || m > 0 )) ; then
>     echo -e "TERMINATION: There are missing PS Type1 font files. It is recommend to
> syncronize all files and databases in this directory (delete Fontmap and rerun
> $0)\n" |tee -a $logfile
>     exit 4
> fi
>
> echo -e "STATUS: There are $numInstalled installed Postscript Type1 Fonts out of $numTTF
> available True Type or Open Type Fonts for user $USER. \n" >>$logfile
>
> if (( $numTTF != $numInstalled ))
> then
>     for ii in ${availableTTF[*]}; do
>         for jj in ${installedPFB[*]}; do
>             if [[ "$ii" != "$jj" ]]; then
>                 counter=$counter-1
>             fi
>         done
>         if (( $counter ==  0 )) ; then
>             queueFonts=("${queueFonts[@]}" "$ii")
>         fi
>        counter=$numInstalled
>     done
> else
>     echo "INFO: Font database is up-to-date if you have not fiddled with the
> contents of this directory or the local Fontmap file manually after the
> last run of this script. Consult the log file for history.
>    
> Nothing to do. No new fonts installed." |tee -a $logfile
>     exit 0
> fi
>
> for ff in ${queueFonts[@]}; do
>     echo "-----------------------------------------------------------------"\
>        >>$logfile
>     echo "START OF TTF2PT1 LOG ENTRY FOR '$ff'" >>$logfile
>     echo $(date) >>$logfile
>     echo "-----------------------------------------------------------------"\
>        >>$logfile
>
>     ttf2pt1 -b $ff.[oOtT][tT][fF]  >>$logfile 2>&1
>
>     fontNames=("${fontNames[@]}" "$(grep FontName $ff.afm | cut -d' ' -f2-)")
>     familyNames=("${familyNames[@]}" \
>         "$(grep FamilyName $ff.afm | cut -d' ' -f2- | sed 's/ /_/g')")
>     faceNames=("${faceNames[@]}" \
>         "$(grep Weight $ff.afm | cut -d' ' -f2- | \
>         sed -e' s/^./\U&/g; s/ *//g; s/Regular/Base/i; s/Italic/Slope/i ')")
>     tagNames=("${tagNames[@]}" "${familyNames[@]:(-1)}-${faceNames[@]:(-1)}")
>
>     echo "/${fontNames[@]:(-1)} ($ff.pfb);" >>Fontmap
>    
>     if [[ -z `cat myfontdefs.ld | sed -n '/'"$ff"'.afm/p'` ]] ; then
>         cat >>myfontdefs.ld<<LOUT_ENTRY
> { @FontDef
>       @Tag { ${tagNames[@]:(-1)} }
>       @Family { ${familyNames[@]:(-1)} }
>       @Face { ${faceNames[@]:(-1)} }
>       @Name { ${fontNames[@]:(-1)} }
>       @Metrics { $ff.afm }
>       @Mapping { LtLatin1.LCM }
> }
>
> LOUT_ENTRY
>     fi
>    
>     # Correct for whitespace error in afm files
>     sed -i 's/.null/space/' $ff.afm
>
>     echo "*****************************************************************"\
>         >>$logfile
>     echo -e "Font: ${fontNames[@]:(-1)}; Tag: ${tagNames[@]:(-1)} (has been \
> installed.)" |tee -a $logfile
> done


reply via email to

[Prev in Thread] Current Thread [Next in Thread]