2:- module(drs2tex,[drs2tex/2]).    3
    4:- use_module(semlib(drs2fol),[symbol/4]).    5
    6
    7/*========================================================================
    8   Latex DRSs
    9========================================================================*/
   10
   11drs2tex(smerge(B1,B2),Stream):- !, 
   12   drs2tex(merge(B1,B2),Stream).
   13
   14drs2tex(alfa(_,B1,B2),Stream):- !, 
   15   write(Stream,'('),
   16   drs2tex(B1,Stream),
   17   write(Stream,'$\\alpha$'),
   18   drs2tex(B2,Stream),
   19   write(Stream,')').
   20
   21drs2tex(merge(B1,B2),Stream):- !, 
   22   write(Stream,'('),
   23   drs2tex(B1,Stream),
   24   write(Stream,';'),
   25   drs2tex(B2,Stream),
   26   write(Stream,')').
   27
   28drs2tex(drs(D,C),Stream):- !,
   29   write(Stream,'\\drs{'),
   30   refs2tex(D,Stream),
   31   write(Stream,'{'),
   32   conds2tex(C,Stream),
   33   write(Stream,'}').
   34
   35
   36/*========================================================================
   37   Tex DRS-referents
   38========================================================================*/
   39
   40refs2tex([],Stream):- !,
   41   write(Stream,'}').
   42
   43refs2tex([_:C],Stream):- !,
   44   write(Stream,C),
   45   write(Stream,'}').
   46
   47refs2tex([_:C|L],Stream):-
   48   write(Stream,C),
   49   write(Stream,' '),
   50   refs2tex(L,Stream).
   51
   52
   53/*========================================================================
   54   Tex DRS-Conditions
   55========================================================================*/
   56
   57conds2tex([],_):- !.
   58
   59conds2tex([_:C],Stream):- !,
   60   cond2tex(C,Stream,_), 
   61   write(Stream,'\\\\[-3pt]').
   62
   63conds2tex([_:C|L],Stream):-
   64   cond2tex(C,Stream,N), 
   65   format(Stream,'\\\\[~ppt]~n',[N]),
   66   conds2tex(L,Stream).
   67
   68
   69/*========================================================================
   70   Tex DRS-Condition
   71========================================================================*/
   72
   73cond2tex(not(Drs),Stream,9):- !,
   74   write(Stream,'$\\lnot$'),
   75   drs2tex(Drs,Stream).
   76
   77cond2tex(nec(Drs),Stream,9):- !,
   78   write(Stream,'$\\Diamond$'),
   79   drs2tex(Drs,Stream).
   80
   81cond2tex(pos(Drs),Stream,9):- !,
   82   write(Stream,'$\\Box$'),
   83   drs2tex(Drs,Stream).
   84 
   85cond2tex(prop(X,Drs),Stream,9):- !,
   86   write(Stream,X),
   87   write(Stream,':'),
   88   drs2tex(Drs,Stream).
   89
   90cond2tex(or(Drs1,Drs2),Stream,9):- !,
   91   drs2tex(Drs1,Stream),
   92   write(Stream,'$\\lor$'),
   93   drs2tex(Drs2,Stream).
   94
   95cond2tex(imp(Drs1,Drs2),Stream,9):- !,
   96   drs2tex(Drs1,Stream),
   97   write(Stream,'$\\Rightarrow$'),
   98   drs2tex(Drs2,Stream).
   99
  100cond2tex(whq(Drs1,Drs2),Stream,9):- !,
  101   drs2tex(Drs1,Stream),
  102   write(Stream,'?'),
  103   drs2tex(Drs2,Stream).
  104
  105cond2tex(duplex(_,Drs1,_,Drs2),Stream,N):- !, 
  106   cond2tex(whq(Drs1,Drs2),Stream,N).
  107
  108cond2tex(card(X,C,_),Stream,1):- !,
  109   write(Stream,'$|$'),
  110   write(Stream,X),
  111   write(Stream,'$|$ = '),
  112   write(Stream,C).
  113
  114cond2tex(named(X,C,T,_),Stream,1):- !,
  115   write(Stream,'named('),
  116   write(Stream,X),
  117   write(Stream,','),
  118   write(Stream,C),
  119   write(Stream,','),
  120   write(Stream,T),
  121   write(Stream,')').
  122
  123cond2tex(timex(X,D1),Stream,1):- !,
  124   sym2tex(D1,t,_Sense,D2),
  125   write(Stream,D2),
  126   write(Stream,'('),
  127   write(Stream,X),
  128   write(Stream,')').
  129
  130cond2tex(eq(X,Y),Stream,1):-  !,
  131   write(Stream,X),
  132   write(Stream,' = '),
  133   write(Stream,Y).
  134
  135cond2tex(pred(X,Sym1,Type,Sense),Stream,1):- 
  136   sym2tex(Sym1,Type,Sense,Sym2), !,
  137   write(Stream,Sym2),
  138   write(Stream,'('),
  139   write(Stream,X),
  140   write(Stream,')').
  141
  142cond2tex(rel(X,Y,Sym1,Sense),Stream,1):- 
  143   sym2tex(Sym1,r,Sense,Sym2), !,
  144   write(Stream,Sym2),
  145   write(Stream,'('),
  146   write(Stream,X),
  147   write(Stream,','),
  148   write(Stream,Y),
  149   write(Stream,')').
  150
  151cond2tex(role(X,Y,Sym1,1),Stream,1):- 
  152   sym2tex(Sym1,r,1,Sym2), !,
  153   write(Stream,Sym2),
  154   write(Stream,'('),
  155   write(Stream,X),
  156   write(Stream,','),
  157   write(Stream,Y),
  158   write(Stream,')').
  159
  160cond2tex(role(X,Y,Sym1,-1),Stream,1):- 
  161   sym2tex(Sym1,r,1,Sym2), !,
  162   write(Stream,Sym2),
  163   write(Stream,'('),
  164   write(Stream,Y),
  165   write(Stream,','),
  166   write(Stream,X),
  167   write(Stream,')').
  168
  169
  170/*========================================================================
  171   Tex non-logical sym2texs
  172========================================================================*/
  173
  174sym2tex(Sym1,Type,Sense,Sym3):-
  175   symbol(Type,Sym1,Sense,Sym2),
  176   name(Sym2,Codes2),
  177   underscore(Codes2,Codes3),
  178   name(Sym3,Codes3).
  179
  180
  181/*========================================================================
  182   Deal with underscores
  183========================================================================*/
  184
  185underscore([],[]).
  186
  187underscore([95|L1],[92,95|L2]):- !,
  188   underscore(L1,L2).
  189
  190underscore([X|L1],[X|L2]):- !,
  191   underscore(L1,L2)