summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-privinst.html
blob: 3cbdc3ec470cd743f054c655450261bdb0ef37d1 (plain)
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>&ldquo;Private&rdquo; 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&rsquo;s
unwilling to update and won&rsquo;t give you privileges to do the job
yourself.  A <a href="FAQ-tempinst.html">&ldquo;temporary&rdquo; installation</a> is
sometimes the correct approach, but if there&rsquo;s the slightest chance
that the installation will be needed on more than one project,
temporary installations aren&rsquo;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&rsquo;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&rsquo;s necessary
since you don&rsquo;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&rsquo;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> &mdash; an idea that sounds more frightening that it
actually is.  The installation&rsquo;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 (&ldquo;<code>%</code>&rdquo;), and the person who 
installed your system may have left them there.  Whatever, you need to
modify the line that&rsquo;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&rsquo;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 &ldquo;just use&rdquo; files in
your new tree, in preference to anything in the main tree &mdash; 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>