summaryrefslogtreecommitdiffstats
path: root/config/macros.tex
blob: dba337e4d3c4fedcd2b71d5510cc48fb29f06fa9 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
%%% Emacs: -*- mode:latex; coding:utf-8; -*-

%% Un peu de magie en Lua: ces fonctions servent à transformer une
%% suite de caractères en les commandes \char ou \luatexUmathchar qui
%% représentent ces caractères.

\directlua{
dmadore = {} % Nom du module où stocker ces fonctions
function dmadore.process_chars(consumer)
  local nesting = 0
  local t
  repeat
    t = token.get_next()
    if t[1]==1 then % Accolade ouvrante
      if nesting>0 then consumer(t[2]) end
      nesting = nesting+1
    elseif t[1]==2 then % Accolade fermante
      nesting = nesting-1
      if nesting>0 then consumer(t[2]) end
    elseif t[1]>=3 and t[1]<=15 then % La plupart des caractères
      consumer(t[2])
    elseif token.is_activechar(t) then % Caractère actif
      for v in string.utfvalues(token.csname_name(t)) do
        consumer(v)
      end
    else % Commande
      do
        local name_iter = string.utfvalues(token.csname_name(t))
        local v = name_iter()
        if v == nil or not (name_iter() == nil) then
          tex.error("I didn't expect a control sequence here")
        else
          consumer(v)
        end
      end
    end
  until nesting==0
end
function dmadore.emit_text_char(v)
  tex.sprint(luatexbase.catcodetables.CatcodeTableLaTeX, string.char(0x5c).."char ", v)
end
function dmadore.emit_math_char(v)
  tex.sprint(luatexbase.catcodetables.CatcodeTableLaTeX, string.char(0x5c).."luatexUmathchar 7 0 ", v)
end
function dmadore.emit_text_chars()
  dmadore.process_chars(dmadore.emit_text_char)
  tex.sprint(string.char(0x5c).."relax ")
end
function dmadore.emit_math_chars()
  dmadore.process_chars(dmadore.emit_math_char)
  tex.sprint(string.char(0x5c).."relax ")
end
}

\def\emittextchars{\directlua{dmadore.emit_text_chars()}}
\def\emitmathchars{\directlua{dmadore.emit_math_chars()}}

%%
%% Macros pour les formules
%%

%% Opérateurs en caractères romains, etc.

% Macros servant à obtenir des caractères romains/sans-sérif "ordinaires" en mode maths
%
% Le but est de résoudre le problème des accents qui n'apparaissaient
% pas, par exemple, dans \mathrm{Dér} (parce qu'Unicode ne définit pas
% les caractères accentués dans les alphabets mathématiques et,
% concrètement, parce que le package unicode-math ne leur donne pas
% des \mathcode appropriés, et ne fournit d'ailleurs pas de 'é'
% sans-sérif ou autre truc du genre).
%
% Ces macros servent donc à écrire du texte dans des formules
% mathématiques, de façon un peu « intermédiaire » entre \mathrm et
% \textrm : elles créent du vrai mode maths (donc qui change de taille
% en exposant et indice, contrairement à \textrm) mais en allant
% chercher dans une police orientée texte et _sans_ aller prendre dans
% les alphabets « mathématiques » d'Unicode.  Attention : à cause de
% l'usage de \emitmathchars, le paramètre passé à ces macros ne doit
% pas contenir de commande quelle qu'elle soit, uniquement des
% caractères.

\newcommand\mathtextrm[1]{\mathtextrmfont{\emitmathchars{#1}}}
\newcommand\mathtextsf[1]{\mathtextsffont{\emitmathchars{#1}}}
\newcommand\mathtexttt[1]{\mathtextttfont{\emitmathchars{#1}}}

% Macro pour définir un opérateur dans une police quelconque
\newcommand\DeclareMathOperatorWithFont[3]{%
\newcommand{#1}{\mathop{\kern0pt\relax#2{#3}}\nolimits}}

\DeclareMathOperatorWithFont{\Hom}{\mathtextsf}{Hom}
\DeclareMathOperatorWithFont{\MHom}{\mathtextsf}{MHom}
\DeclareMathOperatorWithFont{\End}{\mathtextsf}{End}
\DeclareMathOperatorWithFont{\Isom}{\mathtextsf}{Isom}
\DeclareMathOperatorWithFont{\Aut}{\mathtextsf}{Aut}
\DeclareMathOperatorWithFont{\Int}{\mathtextsf}{Int}
\DeclareMathOperatorWithFont{\Out}{\mathtextsf}{Out}

\DeclareMathOperatorWithFont{\Sym}{\mathtextsf}{Sym} % quelle police utiliser ?

\DeclareMathOperatorWithFont{\Der}{\mathtextrm}{Dér} % quelle police utiliser ?

\DeclareMathOperatorWithFont{\Id}{\mathtextrm}{Id}
\DeclareMathOperatorWithFont{\Ker}{\mathtextrm}{Ker}
\DeclareMathOperatorWithFont{\Coker}{\mathtextrm}{Coker}
\DeclareMathOperatorWithFont{\rmIm}{\mathtextrm}{Im}
\AtBeginDocument{\let\Im\rmIm} % Écrase la définition standard de \Im
\DeclareMathOperatorWithFont{\Fix}{\mathtextrm}{Fix}
\DeclareMathOperatorWithFont{\Stab}{\mathtextrm}{Stab}

\DeclareMathOperatorWithFont{\pgcd}{\mathtextrm}{pgcd}
\DeclareMathOperatorWithFont{\ppcm}{\mathtextrm}{ppcm}

\DeclareMathOperatorWithFont{\prlim}{\mathtextrm}{lim}
\DeclareMathOperatorWithFont{\colim}{\mathtextrm}{colim}

\DeclareMathOperatorWithFont{\car}{\mathtextrm}{car}
\DeclareMathOperatorWithFont{\Frob}{\mathtextrm}{Frob}

\DeclareMathOperatorWithFont{\Spec}{\mathtextrm}{Spec}
\DeclareMathOperatorWithFont{\Specmax}{\mathtextrm}{Specmax}
\DeclareMathOperatorWithFont{\Frac}{\mathtextrm}{Frac}
\DeclareMathOperatorWithFont{\Nilp}{\mathtextrm}{Nilp}
\DeclareMathOperatorWithFont{\red}{\mathtextrm}{red}
\DeclareMathOperatorWithFont{\Idem}{\mathtextrm}{Idem}
\DeclareMathOperatorWithFont{\Ann}{\mathtextrm}{Ann}
\DeclareMathOperatorWithFont{\rad}{\mathtextrm}{rad}

\DeclareMathOperatorWithFont{\dec}{\mathtextrm}{déc}
\DeclareMathOperatorWithFont{\Gal}{\mathtextrm}{Gal}
\DeclareMathOperatorWithFont{\Result}{\mathtextrm}{Résult}
\DeclareMathOperatorWithFont{\Pic}{\mathtextrm}{Pic}
\DeclareMathOperatorWithFont{\Br}{\mathtextrm}{Br}
\DeclareMathOperatorWithFont{\Azu}{\mathtextrm}{Azu}

\DeclareMathOperatorWithFont{\Tr}{\mathtextrm}{Tr}
\DeclareMathOperatorWithFont{\Trd}{\mathtextrm}{Trd}
\DeclareMathOperatorWithFont{\N}{\mathtextrm}{N}
\DeclareMathOperatorWithFont{\Nrd}{\mathtextrm}{Nrd}
\DeclareMathOperatorWithFont{\NSpin}{\mathtextrmfont}{\emitmathchars{N}\!\emitmathchars{S}}

\DeclareMathOperatorWithFont{\ev}{\mathtextrm}{ev}
\DeclareMathOperatorWithFont{\pr}{\mathtextrm}{pr}

\DeclareMathOperatorWithFont{\ob}{\mathtextsf}{Ob}

\DeclareMathOperatorWithFont{\GL}{\mathtextrm}{GL}
\DeclareMathOperatorWithFont{\PGL}{\mathtextrm}{PGL}
\DeclareMathOperatorWithFont{\AGL}{\mathtextrm}{AGL}
\DeclareMathOperatorWithFont{\PSL}{\mathtextrm}{PSL}
\DeclareMathOperatorWithFont{\Orth}{\mathtextrm}{O}
\DeclareMathOperatorWithFont{\SOrth}{\mathtextrm}{SO}

\DeclareMathOperatorWithFont{\rang}{\mathtextrm}{rang}
\DeclareMathOperatorWithFont{\degtr}{\mathtextrm}{deg.tr}

\DeclareMathOperatorWithFont{\diag}{\mathtextrm}{diag}

\DeclareMathOperatorWithFont{\Res}{\mathtextrm}{Rés}

% Exposants
\newcommand{\op}{^{\mathtextsf{op}}}
\newcommand{\sep}{^{\mathtextrm{sép}}}
\newcommand{\alg}{^{\mathtextrm{alg}}}

%% Ensembles usuels
\newcommand{\ZZ}{\mathbf{Z}}
\newcommand{\NN}{\mathbf{N}}
\newcommand{\RR}{\mathbf{R}}
\newcommand{\QQ}{\mathbf{Q}}
\newcommand{\CC}{\mathbf{C}}
\newcommand{\PP}{\mathbf{P}}
\newcommand{\FF}{\mathbf{F}}
\newcommand{\GG}{\mathbf{G}}
\newcommand{\Gm}{\mathbf{G}_{\mathrm{m}}}
\newcommand{\Ga}{\mathbf{G}_{\mathrm{a}}}

%% Divers (choses qu'on pourrait vouloir changer)

% Barre oblique apparaissant dans A/k
\newcommand{\bo}{/}

% Symbole de Legendre
\newcommand{\Legendre}[2]{\left(\frac{#1}{#2}\right)}

% Coefficient du binôme (à changer)
\renewcommand{\binom}[2]{\big(\begin{matrix}\scriptstyle #1 \\ \scriptstyle  #2 \end{matrix}\big)}

% Quaternions
\def\quater#1#2{\left(\frac{#1}{#2}\right)_{\mathbf{H}}}

% Transposée
\def\transpose#1{{^{\mathrm{t}}{#1}}}

% Pourquoi a-t-on fait ça ?
\newcommand{\MM}{\mathfrak{m}}

% Police pour les catégories
\newcommand{\categ}[1]{\mathtt{#1}} % Pour une variable (C, D, etc.)
\newcommand{\categmot}[1]{\mathtexttt{#1}} % Pour une abréviation (Ens, Alg, etc.)

\newcommand{\Ens}{\categmot{Ens}}
\newcommand{\Alg}{\categmot{Alg}}

%% Macros générales
\providecommand*\clap[1]{\hbox to 0pt{\hss#1\hss}}

% Trouvé sur <URL: http://tug.org/pipermail/luatex/2010-October/002192.html >
\makeatletter
\def\DeclareUnicodeMathSymbol#1#2#3#4{
  \global\luatexUmathchardef#1=
    "\mathchar@type#2
    \the\csname sym#3\endcsname
    #4
}
\makeatother

% Adapté du package mathtools
\makeatletter
\newcommand\mathrlap[1][\@empty]{
  \ifx\@empty#1\@empty
    \expandafter \mathpalette \expandafter \sub@mathrlap
  \else
    \expandafter \sub@mathrlap \expandafter #1
  \fi
}
\def\sub@mathrlap#1#2{{}\rlap{$\m@th#1{#2}$}}
\makeatother

%% Tiret et trait d'union en mode maths
%\DeclareMathSymbol{\tiret}{\mathord}{operators}{"2013}
\DeclareUnicodeMathSymbol{\tiret}{\mathord}{operators}{"2013}
\DeclareMathSymbol{\traitdunion}{\mathord}{operators}{"2D}

%% Symboles divers
\DeclareUnicodeMathSymbol{\boxempty}{\mathord}{operators}{"25A1}
\DeclareUnicodeMathSymbol{\bimu}{\mathord}{operators}{"1D6CD}

% Ne pas utiliser \buildrel\sim\over\to mais plutôt :
\DeclareUnicodeMathSymbol{\simto}{\mathrel}{operators}{"2972}

%% En attendant de trouver une solution (cf. \bigboxtimes de mathabx qui ne marche pas avec nos paquets)
\newcommand{\bigboxtimes}{\mathop{\lower.6ex\hbox{\huge$\boxtimes$}}\limits}

%% Produit restreint
\newcommand{\resprod}{\mathop{\mathrlap{\coprod}{\prod}}}

%% Une horreur pour avoir \lwave et compagnie sans inclure le package mathdesign:
\DeclareFontFamily{OMX}{mdput}{}
\DeclareFontShape{OMX}{mdput}{m}{n}{<-> mdputr7v}{}
\DeclareSymbolFont{mathdesignlargesymbols}{OMX}{mdput}{m}{n}
\SetSymbolFont{mathdesignlargesymbols}{bold}{OMX}{mdput}{b}{n}
\DeclareMathDelimiter{\lwave}{\mathopen} {mathdesignlargesymbols}{"D0}{mathdesignlargesymbols}{"D0}
\DeclareMathDelimiter{\rwave}{\mathclose}{mathdesignlargesymbols}{"D0}{mathdesignlargesymbols}{"D0}
\DeclareMathDelimiter{\levaw}{\mathopen} {mathdesignlargesymbols}{"D1}{mathdesignlargesymbols}{"D1}
\DeclareMathDelimiter{\revaw}{\mathclose}{mathdesignlargesymbols}{"D1}{mathdesignlargesymbols}{"D1}

%% Caractères japonais
% On définit la police IPA Mincho.  En mode texte :
\newfontfamily\IPAMincho[Script=CJK]{IPAMincho}
% Et en mode maths :
\ExplSyntaxOn
\fontspec_set_family:Nnn{\IPAMinchoFamily}{Script=CJK}{IPAMincho}
\ExplSyntaxOff
\DeclareSymbolFont{japanese}{EU2}{\IPAMinchoFamily}{\mddefault}{\updefault}
% Maintenant on peut définir les caractères eux-mêmes
\Umathcode`別="0 \symjapanese"5225
\DeclareUnicodeMathSymbol{\betsu}{\mathord}{japanese}{"5225}
\Umathcode`正="0 \symjapanese"6B63
\Umathcode`玉="0 \symjapanese"7389
\Umathcode`田="0 \symjapanese"7530
\DeclareUnicodeMathSymbol{\yoneDA}{\mathord}{japanese}{"7530}
\Umathcode`米="0 \symjapanese"7C73
\DeclareUnicodeMathSymbol{\yone}{\mathord}{japanese}{"7C73}
\Umathcode`鬼="0 \symjapanese"9B3C

\newcommand{\japonais}[1]{{\IPAMincho #1}}

% Voir <URL: http://tex.stackexchange.com/questions/95304/spacing-changes-when-using-unicode-math-range-feature-why >
\setmathfont[range={}]{XITS Math}

%% Fabrice n'aime pas les noms anglais
\let\chap\widehat
\let\gtilde\widetilde
\let\sur\overline
\let\sous\underline
\let\dessusdessous\stackrel

%%
%% Environnements français (on évite babel, qui interagit mal avec LuaTeX)
%%

%% Utiliser les règles de césure françaises

%% Note pour moi-même : \bbl@patterns est défini dans
%% tex/luatex/hyph-utf8/hyphen.cfg (un remplacement minimal des
%% fonctions de Babel pour LuaTeX).  Ceci va essentiellement charger
%% puis appeler luatexhyphen.loadlanguage("french") puis
%% \language=\csname l@french\endcsname\relax (primitive).
\makeatletter
\bbl@patterns{french}
\makeatother

%% Noms français pour toutes sortes de choses

\theoremstyle{plain}
\newtheorem{lemme2}[subsubsection]{Lemme}
\newtheorem{proposition2}[subsubsection]{Proposition}
\newtheorem{theoreme2}[subsubsection]{Théorème}
% Ce qui suit définit l'environnement {théorème2} comme exactement synonyme de {theoreme2}
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname théorème2\endcsname\csname theoreme2\endcsname
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname endthéorème2\endcsname\csname endtheoreme2\endcsname
\newtheorem{corollaire2}[subsubsection]{Corollaire}
\newtheorem{sslmm2}[subsubsection]{Sous-lemme}
\newtheorem{conjecture2}[subsubsection]{Conjecture}

\newtheorem{definition2}[subsubsection]{Définition}
% Ce qui suit définit l'environnement {définition2} comme exactement synonyme de {definition2}
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname définition2\endcsname\csname definition2\endcsname
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname enddéfinition2\endcsname\csname enddefinition2\endcsname
\newtheorem{convention2}[subsubsection]{Convention}

\theoremstyle{definition}
\newtheorem{remarque2}[subsubsection]{Remarque}
\newtheorem{remarques2}[subsubsection]{Remarques}
\newtheorem{miseengarde2}[subsubsection]{Mise en garde}
\newtheorem{exemple2}[subsubsection]{Exemple}
\newtheorem{exemples2}[subsubsection]{Exemples}
\newtheorem{exercice2}[subsubsection]{Exercice}

\theoremstyle{plain}
\newtheorem{algorithme2}[subsubsection]{Algorithme}
\newtheorem{question2}[subsubsection]{Question}
\newtheorem{definitionrestreinte2}[subsubsection]{Définition restreinte}
% Ce qui suit définit l'environnement {définition2} comme exactement synonyme de {definition2}
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname définitionrestreinte2\endcsname\csname definitionrestreinte2\endcsname
\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname enddéfinitionrestreinte2\endcsname\csname enddefinitionrestreinte2\endcsname
\newtheorem{conventionrestreinte2}[subsubsection]{Convention restreinte}

\renewcommand{\proofname}{Démonstration}
% Ce qui suit définit l'environnement {démo} comme exactement synonyme de {proof}
\expandafter\let\csname démo\endcsname\proof
\expandafter\let\csname enddémo\endcsname\endproof

\renewcommand{\contentsname}{Table des matières}
\renewcommand{\refname}{Références}
\renewcommand{\bibname}{Bibliographie}

\renewcommand{\partname}{Partie}
\ifx\danslelivre\undefined\relax\else
\renewcommand{\chaptername}{Chapitre}
\fi

%%
%% Macros générales
%%


%% Référence externe (chapitre #1, référence #2)
\newcommand\refext[2]{\textbf{#1}-\ref{#2}}

%% Commentaires
\newcommand\commentaire[1]{\textcolor{Magenta}{#1}}
\newcommand\XXX{\textcolor{Magenta}{(XXX)}}

%%
%% Pour afficher le numéro de version Git (exige que LuaTeX soit appelé avec --shell-escape)
%%

\catcode`\%=12
\directlua{
function command_output(cmd)
  local output_pipe = io.popen(cmd)
  local line_iter = output_pipe and output_pipe:lines()
  local line = line_iter and line_iter()
  if output_pipe then output_pipe:close() end
  return line
end
local git_command1 = [[git log --pretty=format:"%h %ai" -1]]
local git_command2 = [[if git diff --quiet HEAD ; then echo clean ; else echo dirty ; fi]]
function git_status()
  local status = command_output(git_command1)
  if status then
    tex.tprint({luatexbase.catcodetables.CatcodeTableLaTeX, string.char(0x5c).."texttt{"}, {-2,status}, {luatexbase.catcodetables.CatcodeTableLaTeX, "}"})
    if not (command_output(git_command2) == "clean") then tex.sprint(-2, " (dirty)") end
  else
    tex.sprint(-2, "?")
  end
end
}
\catcode`\%=14
\def\showgitstatus{\directlua{git_status()}}

%%
%% Paramétrages divers
%%
\setcounter{tocdepth}{2}