before(X, hyperref) :-
    member(X, [fancyhdr, fncychap, float]).
before(hyperref, algorithm).
before(amssymb, X) :-
    member(X, [xunicode, xltxtra]).
before(graphicx, X) :-
    member(X, [xltxtra, fontspec]).
before(caption, subfig).
before(amsmath, wasysym).
before(todonotes, program).
before(X, cleverref) :-
    member(X, [algorithm2e, algorithmicx, aliascnt, amsmath, amsthm, caption, hyperref, 'IEEEtrantools', listings, ntheorem, subfig, varioref]).
before(cleverref, X) :-
    member(X, [autonum, hypdvips]).

before(natbib, citeref).

before(babel, X) :-
    member(X, [apacite, microtype, selnolig]).

before(hyperref, X) :-
    member(X, [amsrefs, apacite, ellipsis, chappg, cmap, dblaccnt, glossaries, hypcap, linguex, uri]).
before(X, hyperref) :-
    member(X, [multind, natbib, setspace]).
before(glossaries, X) :-
    member(X, [babel, cleverref, doc, fontenc, inputenc, polyglossia]).
before(X, fontenc) :-
    member(X, [cmap, mmap]).
before(listings, listingsutf8).

before(X, refenums) :-
    member(X, [cleverref, csquotes, hyperref, ifthen]).

before(url, uri).

draw((X,Y)) :- format("~a -> ~a;~n", [Y,X]).

dot :-
    format("digraph{~nrankdir=BT~nedge[arrowhead=none]~nnode [width=0.4, style=filled, fillcolor=palegoldenrod, fontname=\"monospace\"]"),
    findall((X,Y), before(X,Y), L),
    maplist(draw, L),
    format("}~n").
%% swipl -qt 'dot' latex.pl | dot -Tsvg
