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
|
<head>
<title>UK TeX FAQ -- question label privinst</title>
</head><body>
<h3>“Private” installations of files</h3>
<p/>It sometimes happens that you need a new version of some macro package
or font, but that the machine you use is maintained by someone who’s
unwilling to update and won’t give you privileges to do the job
yourself. A <a href="FAQ-tempinst.html">“temporary” installation</a> is
sometimes the correct approach, but if there’s the slightest chance
that the installation will be needed on more than one project,
temporary installations aren’t right.
<p/>In circumstances where you have plenty of quota on backed-up media, or
adequate local scratch space, the correct approach is to create a
private installation of (La)TeX which includes the new stuff you
need; this is the ideal, but is not generally possible.
<p/>So, since you can’t install into the public <code>texmf</code> tree, you
have to install into a <i>texmf</i> tree of your own; fortunately, the
TDS standard allows for this, and modern distributions allow
you to do it. The most modern distributions refer to the tree as
<code>$TEXMFHOME</code>, but it used to be called <code>$HOMETEXMF</code>;
so to check that your TeX system does indeed support the mechanism
you should start with
<pre>
kpsewhich -expand-var "\$TEXMFHOME"
</pre>
<p/>If you can confirm that the technique does indeed work, install your
new package (or whatever) in the <a href="FAQ-install-where.html">correct place</a>
in a tree based on <i>$HOME/texmf</i>, and generate an index of that
tree
<blockquote>
<pre>
texhash $HOME/texmf
</pre>
</blockquote><p>
(the argument specifies which tree you are indexing: it’s necessary
since you don’t, by hypothesis, have access to the main tree, and
<i>texhash</i> without the argument would try to write the main
tree.
<p/>There are two wrinkles to this simple formula: first, the installation
you’re using may <em>not</em> define a home TEXMF directory, and second,
there may be some obstruction to using <i>$HOME/texmf</i> as the
default name. In either case, a good solution is to have your own
<i>texmf.cnf</i> — an idea that sounds more frightening that it
actually is. The installation’s existing file may be located with the
command:
<blockquote>
<pre>
kpsewhich texmf.cnf
</pre>
</blockquote><p>
Take a copy of the file and put it into a directory of your own; this
could be any directory, but an obvious choice is the <i>web2c</i>
directory of the tree you want to create, i.e.,
<i>$HOME/texmf/web2c</i> or the like. Make an environment variable to
point to this directory:
<blockquote>
<pre>
TEXMFCNF=$HOME/texmf/web2c
export TEXMFCNF
</pre>
</blockquote><p>
(for a Bourne shell style system), or
<blockquote>
<pre>
setenv TEXMFCNF $HOME/texmf/web2c
</pre>
</blockquote><p>
(for a C-shell style system). Now edit the copy of <i>texmf.cnf</i>
<p/>There will be a line in the existing file that defines the tree where
everything searches; the simplest form of the line is:
<blockquote>
<pre>
TEXMF = !!$TEXMFMAIN
</pre>
</blockquote><p>
but, there are likely to be several alternative settings behind
comment markers (“<code>%</code>”), and the person who
installed your system may have left them there. Whatever, you need to
modify the line that’s in effect: change the above to three lines:
<blockquote>
<pre>
HOMETEXMF = $HOME/texmf
TEXMF = {$HOMETEXMF,!!$TEXMFMAIN}
% TEXMF = !!$TEXMFMAIN
</pre>
</blockquote><p>
the important point being that <code>$HOMETEXMF</code> must come before
whatever was there before, inside the braces. For example, if the
original was
<blockquote>
<pre>
TEXMF = {!!$LOCALTEXMF,!!$TEXMFMAIN}
</pre>
</blockquote><p>
it should be converted to:
<blockquote>
<pre>
HOMETEXMF = $HOME/texmf
TEXMF = {$HOMETEXMF,!!$LOCALTEXMF,!!$TEXMFMAIN}
% TEXMF = {!!$LOCALTEXMF,!!$TEXMFMAIN}
</pre>
</blockquote><p>
(retaining the original, as a comment, is merely an aide-memoir in
case you need to make another change, later). The <code>!!</code> signs
tell the file-searching library that it should insist on a
<i>texhash</i>-ed directory tree; if you can count on yourself
remembering to run <i>texhash</i> on your new tree every time you
change it, then it’s worth adding the marks to your tree:
<blockquote>
<pre>
TEXMF = {!!$HOMETEXMF,!!$LOCALTEXMF,!!$TEXMFMAIN}
</pre>
</blockquote><p>
as this will make (La)TeX find its files marginally faster.
<p/>Having made all these changes, (La)TeX should “just use” files in
your new tree, in preference to anything in the main tree — you can
use it for updates to packages in the main tree, as well as for
installing new versions of things.
<p/><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=privinst">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=privinst</a>
</body>
|