TexLive: Difference between revisions

imported>Hook
Initial TeXLive page
 
Add a section on adding a custom package to the combined package set
 
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
According to [[Wikipedia:TeX Live|Wikipedia]]:


== List of package sets ==
:'''TeX Live''' is a free software distribution for the [[Wikipedia:TeX|TeX]] typesetting system that includes major TeX-related programs, macro packages, and fonts.


Since TeX Live consist of thousands of packages, to make managing it easier, NixOS provides the following sets:
== Installation ==
Since TeX Live consist of thousands of packages, to make managing it easier, NixOS replicates the  
organization of TeX Live into 'schemes' and 'collections'


* nixpkgs.texlive.combined.scheme-basic (texlive-combined-basic)
The following Tex Live schemes are available:
* nixpkgs.texlive.combined.scheme-context (texlive-combined-context)
* nixpkgs.texlive.combined.scheme-full (texlive-combined-full)
* nixpkgs.texlive.combined.scheme-gust (texlive-combined-gust)
* nixpkgs.texlive.combined.scheme-medium (texlive-combined-medium)
* nixpkgs.texlive.combined.scheme-minimal (texlive-combined-minimal)
* nixpkgs.texlive.combined.scheme-small (texlive-combined-small)
* nixpkgs.texlive.combined.scheme-tetex (texlive-combined-tetex)


(TODO: explain difference between sets)
{| class="wikitable"
|-
! Name of TeX Live package
! Name of Nixos-derivation
! Comment
|-
|width=20% valign=top| Scheme-full
|width=50% valign=top| <code>nixpkgs.texlive.combined.scheme-full</code>
|width=30% valign=top| Contains every TeX Live package
|-
| Scheme-medium
| <code>nixpkgs.texlive.combined.scheme-medium</code>
| contains everything in the small scheme + more packages and languages
|-
| Scheme-small
| <code>nixpkgs.texlive.combined.scheme-small</code>
| contains everything in the basic scheme + xetex, metapost, a few languages.
|-
| Scheme-basic
| <code>nixpkgs.texlive.combined.scheme-basic</code>
| contains everything in the plain scheme but includes latex.
|-
| Scheme-minimal
| <code>nixpkgs.texlive.combined.scheme-minimal</code>
| contains plain only.
|-
| Scheme-teTeX
| <code>nixpkgs.texlive.combined.scheme-tetex</code>
| contains more than the medium scheme, but nowhere near the full scheme.
|-
| Scheme-ConTeXt
| <code>nixpkgs.texlive.combined.scheme-context</code>
| contains ConTeXt
|-
| Scheme-GUST
| <code>nixpkgs.texlive.combined.scheme-gust</code>
| contains gust
|}


== Common problems ==
===Combine Sets===
You can install a set with extra packages by using something like


<code>(texlive.combine {
inherit (texlive) scheme-medium xifthen ifmtarg framed paralist titlesec;
})
</code>
For a minimal set of packages needed for Emacs Orgmode, as described in org-latex-default-packages-alist variable, install these packages:
<pre>
{ config, pkgs, ... }:
let
  tex = (pkgs.texlive.combine {
    inherit (pkgs.texlive) scheme-basic
      dvisvgm dvipng # for preview and export as html
      wrapfig amsmath ulem hyperref capt-of;
      #(setq org-latex-compiler "lualatex")
      #(setq org-preview-latex-default-process 'dvisvgm)
  });
in
{ # home-manager
  home.packages = with pkgs; [
    tex
  ];
}
</pre>
== Adding a Custom Package ==
If you have a custom LaTeX package or style file that is not part of the TeXLive distribution, you can add it to the package set like this:
First, create a derivation for your package. The contents of <code>$out/tex</code> will later be placed in <code>texmf/tex</code>
latex-corporate-identity = pkgs.stdenvNoCC.mkDerivation {
  name = "latex-corporate-identity";
  src = ./path/to/package/tree;
  installPhase = "cp -r $src $out";
  passthru.tlType = "run";
};
texlive-corporate-identity = {
  pkgs = [ latex-corporate-identity ];
};
The directory tree under the path specified as src looks like this:
└── tex
    └── latex
        └── corporate-identity
            ├── corporate-identity.sty
You can now add the package to the combined set as you would with any other texlive package:
tex = pkgs.texlive.combine {
  inherit (pkgs.texlive) scheme-full;
  inherit texlive-corporate-identity;
};
== Troubleshooting ==
=== Missing <code>lmodern.sty</code> ===
If LaTex (perhaps through Pandoc) complains about missing <code>lmodern.sty</code>, make sure you have at least <code>texlive.combined.scheme-medium</code> installed (-full should work as well; while -small worked for some, but not for all).
If LaTex (perhaps through Pandoc) complains about missing <code>lmodern.sty</code>, make sure you have at least <code>texlive.combined.scheme-medium</code> installed (-full should work as well; while -small worked for some, but not for all).
=== Invalid fontname ‘Latin Modern Roman/ICU’ ===
If you get an error message saying “Invalid fontname ‘Latin Modern Roman/ICU’. . . ”, then you need to add the
entry '''lmodern''' into your configuration in the section '''fonts.fonts''' and rebuild. 
== Further reading ==
* [https://www.tug.org/texlive/doc/texlive-en/texlive-en.html The Tex Live Guide 2018]
* [[Tex]] in NixOS-Wiki
* [https://flyx.org/nix-flakes-latex/ Building LaTeX Documents Reproducibly with Nix Flakes]
[[Category:Applications]]