I want to be able to use a proprietary font on a number of Linux machines for which TeXLive is installed locally (not through the package manager). I have followed How do I use TrueType Fonts with PDFTeX using otftotfm? and have my proprietary font working with pdflatex when all the files (map, encoding, tfm, pfb, ...) are in the working directory. I then followed Manual font installation and can manually install the font. I would like to automate the final step. Normally, I would create a Linux package that would install the needed files and do the configuration steps. Since I have TeXLive installed locally, I don't feel like using the system package manager is the way to go. I would like to create a TeXLive package and use tlmgr to manage it.

The end goal is I want people to be able to do tlmgr --file myfont and then be able to use the font. Is this possible?

  • If you are using Debian, why not to make a deb file?
    – Sigur
    Nov 20, 2014 at 16:07
  • 1
    @Sigur Had I installed TeXLive with the system package manager, I could just create a deb file. Since I went with a local install of TeXLive, which means TeXlive is installed in /usr/local, it is bad form for a deb package to install or modify anything in /usr/local.
    – StrongBad
    Nov 20, 2014 at 17:47
  • You can use the local folder to do that. Here I have /usr/local/texlive/texmf-local/ or you can use ~/texmf-local.
    – Sigur
    Nov 20, 2014 at 17:48
  • @Sigur I am pretty sure fonts are not the same as packages and classes in that you need to run updmap after adding things to texmf-local.
    – StrongBad
    Nov 20, 2014 at 17:54
  • Well, I installed a font there. I have the folders bibtex doc dvips fonts ls-R metapost tex tlpkg web2c and everything works well. You can ask deb to execute it.
    – Sigur
    Nov 20, 2014 at 17:55

1 Answer 1


If you want to create a TeX Live package, you need to do the following steps. I assume here that you are not shipping any binaries, but only files in a the texmf hierarchy. Also assume that the package is called foo:

  • prepare a TDS tree of the package, say in foo, that is, you have foo/tex, foo/fonts etc.
  • write a tlpobj file in foo/tlpkg/tlpobj/foo.tlpobj that contains the following lines:
name foo
category Package
revision 1
shortdesc something reasonable about your package
relocated 1
execute addMap foo.map
longdesc some more description
longdesc if you want to add it
longdesc can be multi line
runfiles size=1
docfiles size=1
srcfiles size=1

where the following things are important:

  • relocated 1
  • the size parameter can be the actual size in 1k multiplies, but you don't need to add the correct number
  • list all files in one of the section!
  • if you have a map file included and want to activate it, add the execute line, possible adjusting the name of the file

After that go into foo and do tar -cJvf foo.tar.xz . to get the package, which you can install with tlmgr install --from-file foo.tar.xz.

Examples for how a tlpobj file looks like can be found by looking at the texlive.tlpdb, each stanza starting with name is one.

  • Can this be used to install into the local tree?
    – cfr
    Nov 20, 2014 at 23:00
  • 1
    If you use user mode tlmgr, then it can be installed into an arbitrary texmf tree.
    – norbert
    Nov 21, 2014 at 5:00
  • tlmgr install --from-file foo.tar.xz fails with Unknown option: from-file while tlmgr install --file foo.tar.xz fails with: Use of uninitialized value $_[0] in concatenation (.) or string at /usr/local/texlive/2014/tlpkg/TeXLive/TLPOBJ.pm line 74. Use of uninitialized value $_[0] in concatenation (.) or string at /usr/local/texlive/2014/tlpkg/TeXLive/TLPOBJ.pm line 74. Cannot open tlpobj file: at /usr/local/texlive/2014/tlpkg/TeXLive/TLPOBJ.pm line 74.
    – StrongBad
    Nov 21, 2014 at 10:32
  • 1
    @StrongBad sorry for the late answer - it should have been --file ...
    – norbert
    Dec 1, 2014 at 12:38
  • @norbert as I mentioned in the previous comment, I tried with the --file and get an error.
    – StrongBad
    Dec 1, 2014 at 13:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.