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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#!/bin/bash
NAME=isodoc
DOCTYPE=class
EXT=cls
VERSION=`grep " v[0-9.]\+[a-z]\{,1\} $NAME $DOCTYPE" $NAME.dtx |sed 's/.* v\([0-9.]\+[a-z]\{,1\}\) .*/\1/' `
EXECUTABLES=(pdfseparate zip unzip getopt pdflatex xelatex)
function die {
echo -e "$*"
exit 1
}
function help {
cat <<-EOD
This is inst - install the $NAME LaTeX $DOCTYPE
Options:
-h, --help print this help
-c, --clean remove all files created by the installation, except the zip file
-z, --zip Create zip for CTAN (no install, developer only)
Without any options, inst installs $NAME in the first writable
TEXMFMAIN, TEXMFLOCAL or TEXMFHOME tree.
EOD
exit
}
function setdir { # create installation directory
for i in MAIN LOCAL HOME; do
TREE=$(kpsewhich --expand-var \$TEXMF$i)
test -w $TREE && break
TREE=
done
test "$TREE" = "" && die "Could not find a writable TeX tree"
INSTTEX=${TREE}/tex/latex/$NAME
INSTSRC=$TREE/source/latex/$NAME
INSTDOC=$TREE/doc/latex/$NAME
mkdir -p $INSTTEX || die could not create $INSTTEX
mkdir -p $INSTSRC || die could not create $INSTSRC
mkdir -p $INSTDOC || die could not create $INSTDOC
}
function testexecs { # test presence of executables
for i in ${EXECUTABLES[*]}; do
type $i &> /dev/null || die executable $i not found
done
}
function readme { # generate the README file
sed -n '/^%<\*readme>/,/^%<\/readme>/p
/\\changes{v'$VERSION'}/,/^% }/p' $NAME.dtx |
sed 's/^%//;s/\\\\$//
/<.readme>/d
/^ }/d
s/ \\changes.*/Changes in version '$VERSION':/
s/$\\Rightarrow\$/=>/g
s/\\textbackslash/\\/g
s/\\text\(sl\|it\){\([^}]\+\)}/\/\2\//g # \textsl{...} -> /.../
s/{\([^}]*\)}/\1/g # keep last, removes all {...}
' >README
}
function clean { # clean but keep what goes in the zip
rm -f $NAME.{aux,fls,glo,gls,idx,ilg,ind,log,out,toc,$EXT}
rm -f examples/*/{$NAME*,*.{pdf,aux,log,out}}
}
function Clean {
clean
rm -f $NAME.pdf README
}
function makeall {
echo y |tex $NAME.ins >/dev/null
# install any .ttf files
mkdir -p ~/.fonts
find examples -name '*.ttf' -exec cp {} ~/.fonts \;
fc-cache ~/.fonts
# create the README file
readme
# compile all examples
cd examples
for i in *; do
cd $i
for j in ../../{$NAME.cls,languages/isodoc*.ldf}; do ln -sf $j; done
read TEX <$i.tex
if [[ $TEX =~ ^%! ]]; then TEX=${TEX#%!}; else TEX=pdflatex;fi
$TEX --interaction=batchmode $i >/dev/null || die error compiling $i
$TEX --interaction=batchmode $i >/dev/null || die error compiling $i
test -e logoletter.pdf && pdfseparate -l 2 logoletter.pdf logo%d.pdf
cd ..
done
cd ..
# make $NAME.pdf
pdflatex --recorder --interaction=batchmode $NAME.dtx >/dev/null ||
die "`texlog_extract $NAME.log`"
test -f $NAME.glo && makeindex -q -s gglo.ist -o $NAME.gls $NAME.glo
test -f $NAME.idx && makeindex -q -s gind.ist -o $NAME.ind $NAME.idx
pdflatex --interaction=batchmode $NAME.dtx > /dev/null
pdflatex --interaction=batchmode $NAME.dtx > /dev/null
}
function installall {
# install and cleanup
echo installing in $TREE
rm -rf $INSTTEX/* $INSTSRC/* $INSTDOC/*
cp -f $NAME.$EXT languages/iso* $INSTTEX
cp -a $NAME.{ins,dtx} $INSTSRC
cp -a README inst languages/template.ldf $NAME.pdf examples/* $INSTDOC
mktexlsr $TREE 2>/dev/null
clean
}
function mkzip {
clean
cd ..
zipfile=$NAME/$NAME-$VERSION.zip
rm -f $zipfile
zip -Drq $zipfile $NAME/* -x $NAME/test/*
cd $NAME
Clean
}
testexecs
setdir
if ! options=$(getopt -o hcz \
-l help,clean,zip -- "$@"); then exit 1; fi
eval set -- "$options"
while [ $# -gt 0 ]; do
case $1 in
-c|--clean) Clean; exit;;
-z|--zip) makeall; mkzip; exit;;
-h|--help) help;;
(--) shift; break;;
(*) break;;
esac
shift
done
test "$1" = "" || die No arguments expected
makeall
installall
|