forked from ccsl-usp/modelo-latex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
imegoodies.sty
1241 lines (1110 loc) · 59.8 KB
/
imegoodies.sty
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
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% 2017/01/01 -> fontenc TU and mandatory e-TeX support
%
% TODO: After ubuntu 18.04 EOL (April/2023), we should switch to
% 2018/12/01 (kernel uses utf8 by default) and remove inputenc
% and the "@combinedblfloats" bugfix below. After ubuntu 20.04
% EOL (April/2025), check whether arxiv uses at least version
% 2021 of TeXLive; if so, change this to version 2020/10/01,
% which includes file hooks, and make the corresponding
% adjustments (in particular, the AtEndDvi fix further below).
\NeedsTeXFormat{LaTeX2e}[2017/01/01]
\ProvidesPackage{imegoodies}[2022/11/13 1.0 Load several common
and useful packages]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%% CONFIGURAÇÕES E PACOTES BÁSICOS %%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Vários comandos auxiliares para o desenvolvimento de packages e classes;
% aqui, usamos em alguns comandos de formatação e condicionais.
\RequirePackage{etoolbox}
%\RequirePackage{pdftexcmds}
\RequirePackage{letltxmacro}
%\RequirePackage{ltxcmds}
% LaTeX 3
\RequirePackage{expl3}
\RequirePackage{xparse}
\RequirePackage{filehook}
% Detecta se estamos usando pdftex, luatex, xetex etc.
\RequirePackage{iftex}
%\RequirePackage{xfp} % Floating-point calculations
\RequirePackage{regexpatch}
% O projeto LaTeX3 renomeou algumas macros em 2019-03-05 e removeu
% a compatibilidade com os nomes antigos em 2020-07-17 a partir de
% 2021-01-01 (veja o arquivo l3deprecation.dtx e o changelog em
% https://github.com/latex3/latex3/blob/main/l3kernel/CHANGELOG.md).
% Isso afetou a package regexpatch: versões antigas da package não
% funcionam com versões novas de LaTeX e vice-versa. Infelizmente,
% ubuntu 21.04 (hirsute) e debian 11 (bullseye) incluem essas versões
% incompatíveis e, portanto, a package regexpatch não funciona nesses
% ambientes. Talvez fosse possível contornar esse problema com a
% package latexrelease, mas isso afetaria muitos outros recursos.
% Ao invés disso, vamos restaurar manualmente a compatibilidade.
% TODO: remover isto após debian bullseye se tornar obsoleta,
% provavelmente no final de 2024.
\ExplSyntaxOn
\@ifpackagelater{regexpatch}{2021/03/21}
{} % Se regexpatch é "nova", expl3 deve ser também; nada a fazer
{
% Talvez o correto seja 2021/01/01, mas na prática o resultado é o mesmo
\@ifpackagelater{expl3}{2020/07/17}
{
% As versões são incompatíveis; vamos recuperar as macros preteridas
\cs_gset:Npn \token_get_prefix_spec:N { \cs_prefix_spec:N }
\cs_gset:Npn \token_get_arg_spec:N { \cs_argument_spec:N }
\cs_gset:Npn \token_get_replacement_spec:N { \cs_replacement_spec:N }
}
{} % As duas packages são antigas e, portanto, compatíveis entre si
}
\ExplSyntaxOff
% Algumas packages dependem de xpatch e tentam carregá-la, causando conflitos
% com regexpatch. Como regexpatch oferece todos os recursos de xpatch (ela
% é uma versão estendida de xpatch, mas ainda considerada experimental), vamos
% fazê-las acreditar que xpatch já foi carregada.
\@ifpackagelater{regexpatch}{2020/10/06}
{\expandafter\xdef\csname ver@xpatch.sty\endcsname{2020/03/25}}
{\expandafter\xdef\csname ver@xpatch.sty\endcsname{2012/10/02}}
% Acrescenta a correção deste bug (contida na release 2018-11-28):
% https://github.com/latex3/latex2e/issues/94 . Se a correção não
% puder ser aplicada, temos uma versão de LaTeX que já a incorpora.
% Esse bug afeta apenas textos em duas colunas.
% TODO: remover após ubuntu 18.04 se tornar obsoleta (abril/2023)
\patchcmd\@combinedblfloats{\box\@outputbox}{\unvbox\@outputbox}{}{}
% Expressões aritméticas em \set{length,counter} & \addto{length,counter};
% comandos \widthof, \heightof, \depthof, \totalheightof, \settototalheight
\RequirePackage{calc}
% Algumas packages "padrão" da AMS, que são praticamente obrigatórias.
% Algumas delas devem ser carregadas antes de unicode-math ou das
% definições das fontes do documento. É preciso carregar amsthm após
% amsmath para o comando \qedhere funcionar dentro do ambiente align.
\RequirePackage{amssymb}
\RequirePackage{amsmath}
\RequirePackage{amsthm}
% Interface simplificada e recursos adicionais para amsthm; leia a documentação.
\RequirePackage{thmtools}
% melhorias e recursos adicionais para o modo matemático; leia a documentação.
% Melhor se carregada antes de unicode-math.
\RequirePackage{mathtools}
% TeXLive 2018 inclui a versão 2.7a da package microtype e a versão
% 1.07 de luatex. Essa combinação faz aparecer um bug:
% https://tex.stackexchange.com/a/476742
% Aqui, aplicamos a solução sugerida, que não tem "contra-indicações".
% TODO: remover após ubuntu 18.04 se tornar obsoleta (abril/2023)
\ifLuaTeX
\RequirePackage{luatexbase}
\fi
% microajustes no tamanho das letras, espaçamento etc. para melhorar
% a qualidade visual do resultado.
\RequirePackage{microtype}
% Alguns "truques" (sujos?) para minimizar over/underfull boxes.
%
% Para fazer um texto justificado, é preciso modificar o tamanho dos espaços
% em cada linha para mais ou para menos em relação ao seu tamanho ideal. Para
% escolher as quebras de linha, TeX vai percorrendo o texto procurando lugares
% possíveis para quebrar as linhas considerando essa flexibilidade mas dentro
% de um certo limite mínimo/máximo. Nesse processo, ele associa a cada possível
% linha o valor *badness*, que é o nível de distorção do tamanho dos espaços
% daquela linha em relação ao ideal, e ignora opções que tenham badness muito
% grande (esse limite é dado por \tolerance). Depois de encontradas todas
% as possíveis quebras de linha e a badness de cada uma, TeX calcula as
% *penalties* das quebras encontradas, que são uma medida de quebras "ruins".
% Por exemplo, na configuração padrão, quebrar uma linha hifenizando uma
% palavra gera uma penalty de 50; já uma quebra que faça a última linha
% do parágrafo ficar sozinha na página seguinte gera uma penalty de 150.
% Finalmente, TeX calcula a "feiúra" de cada possível linha (demerits)
% com base na badness e nas penalties e escolhe a solução que minimiza os
% demerits totais do parágrafo. Os comandos \linebreak e \pagebreak funcionam
% simplesmente acrescentando uma penalty negativa ao lugar desejado para a
% quebra.
%
% Para cada fonte, o espaço entre palavras tem um tamanho ideal, um
% tamanho mínimo e um tamanho máximo (é possível obter os valores com
% \number\fontdimenX\font\relax, veja https://tex.stackexchange.com/q/88991 ).
% TeX nunca reduz um espaço para menos que o mínimo da fonte, mas pode
% aumentá-lo para mais que o máximo. Se os espaços de uma linha ficam
% com o tamanho ideal, a badness da linha é 0; se o tamanho é
% reduzido/aumentado 50% do mínimo/máximo, a badness da linha é 12; se
% o tamanho é reduzido/aumentado para o mínimo/máximo, a badness é 100,
% e assim por diante. O valor máximo possível para badness é 10.000, que
% significa "badness infinita". Como é feito o cálculo: se as medidas
% do espaço definidas pela fonte são "x plus y minus z" e o tamanho
% final do espaço é "x + k*y" ou "x - k*z", a badness é 100*(k^3). Com
% Libertinus corpo 12, os valores são "3pt plus 1.5pt minus .9996pt",
% Então se o espaço tiver sido aumentado para 3.75pt, o fator é 0.5 e
% a badness é 100*(.5^3) = 12.
%
% \tolerance indica a badness máxima que TeX aceita para uma linha; seu valor
% default é 200. Assim, aumentar para, digamos, 300 ou 400, permite que
% TeX escolha parágrafos com maior variação no espaçamento entre as palavras.
% No entanto, no cálculo de demerits, a badness e as penalties de cada linha
% são elevadas ao quadrado, então TeX geralmente prefere escolher outras
% opções no lugar de uma linha com espaçamento ruim. Por exemplo, órfãs/viúvas
% têm demerit de 22.500 e dois hífens seguidos têm demerit de 10.000; já uma
% linha com badness 400 tem demerit 160.000. Portanto, não é surpreendente que
% a maioria dos parágrafos tenha demerits abaixo de 40.000, quase todos abaixo
% de 100.000 e praticamente nenhum acima de 1.000.000. Isso significa que, para
% a grande maioria dos parágrafos, aumentar \tolerance não faz diferença: uma
% linha com badness 400 nunca será efetivamente escolhida se houver qualquer
% outra opção com badness menor. Também fica claro que não há muita diferença
% real entre definir \tolerance como 800 ou 9.999 (a não ser fazer TeX
% trabalhar mais desnecessariamente).
%
% O problema muda de figura se TeX não consegue encontrar uma solução. Isso
% pode acontecer em dois casos: (1) o parágrafo tem ao menos uma linha que não
% pode ser quebrada com badness < 10.000 ou (2) o parágrafo tem ao menos uma
% linha que não pode ser quebrada com badness < tolerance (mas essa badness é
% menor que 10.000).
%
% No primeiro caso, se houver várias possibilidades de linhas que não podem ser
% quebradas, TeX não vai ser capaz de compará-las e escolher a melhor: todas
% têm a badness máxima (10.000) e, portanto, a que gerar menos deméritos no
% restante do parágrafo será a escolhida. Na realidade, no entanto, essas
% linhas *não* são igualmente ruins entre si, o que pode levar TeX a fazer uma
% má escolha. Para evitar isso, TeX tenta novamente aplicando
% \emergencystretch, que "faz de conta" que o tamanho máximo ideal dos espaços
% da linha é maior que o definido na fonte. Isso reduz a badness de todas as
% linhas, o que soa parecido com aumentar \tolerance. Há três diferenças, no
% entanto: (1) essa mudança só afeta os parágrafos que falharam; (2) soluções
% que originalmente teriam badness = 10.000 (e, portanto, seriam vistas como
% equivalentes) podem ser avaliadas e comparadas entre si; e (3) como a badness
% de todas as linhas diminui, a possibilidade de outras linhas que
% originalmente tinham badness alta serem escolhidas aumenta. Esse último ponto
% significa que \emergencystretch pode fazer TeX escolher linhas mais
% espaçadas, fazendo o espaçamento do parágrafo inteiro aumentar e, portanto,
% tornando o resultado mais homogêneo mesmo com uma linha particularmente ruim.
%
% É esse último ponto que justifica o uso de \emergencystretch no segundo caso
% também: apenas aumentar a tolerância, nesse caso, poderia levar TeX a
% diagramar uma linha ruim em meio a um parágrafo bom, enquanto
% \emergencystretch pode fazer TeX aumentar o espaçamento de maneira geral no
% parágrafo, minimizando o contraste da linha problemática com as demais.
% Colocando a questão de outra maneira, aumentar \tolerance para lidar com
% esses parágrafos problemáticos pode fazê-los ter uma linha especialmente
% ruim, enquanto \emergencystretch pode dividir o erro entre várias linhas.
% Assim, definir \tolerance em torno de 800 parece razoável: no caso geral,
% não há diferença e, se um desses casos difíceis não pode ser resolvido com
% uma linha de badness até 800, \emergencystretch deve ser capaz de gerar um
% resultado igual ou melhor.
%
% Penalties & demerits: https://tex.stackexchange.com/a/51264
% Definições (fussy, sloppy etc.): https://tex.stackexchange.com/a/241355
% Mais definições (hfuzz, hbadness etc.): https://tex.stackexchange.com/a/50850
% Donald Arseneau defendendo o uso de \sloppy: https://groups.google.com/d/msg/comp.text.tex/Dhf0xxuQ66E/QTZ7aLYrdQUJ
% Artigo detalhado sobre \emergencystretch: https://www.tug.org/TUGboat/tb38-1/tb118wermuth.pdf
% Esse artigo me leva a crer que algo em torno de 1.5em é suficiente
\tolerance=800
\hyphenpenalty=100 % Default 50; se o texto é em 2 colunas, 50 é melhor
\setlength{\emergencystretch}{1.5em}
% Não gera warnings para Overfull menor que 1pt
\hfuzz=1pt
\vfuzz\hfuzz
% Não gera warnings para Underfull com badness < 1000
\hbadness=1000
\vbadness=1000
% Por padrão, o algoritmo LaTeX para textos não-justificados é (muito) ruim;
% este pacote implementa um algoritmo bem melhor
\RequirePackage[newcommands]{ragged2e}
% ragged2e funciona porque permite que LaTeX hifenize palavras em textos
% não-justificados quando necessário. No caso de textos centralizados,
% no entanto, isso em geral não é desejável. Assim, newcommands não é
% interessante para \centering e \begin{center}. newcommands também
% causa problemas com legendas se o float correspondente usa \centering
% (o que é muito comum). Assim, vamos voltar \centering e \begin{center}
% à definição padrão.
\let\centering\LaTeXcentering
\let\center\LaTeXcenter
\let\endcenter\endLaTeXcenter
% Com ragged2e e a opção "newcommands", textos curtos não-justificados
% podem gerar warnings sobre "underfull \hbox". Não há razão para pensar
% muito nesses warnings, então melhor desabilitá-los.
% https://tex.stackexchange.com/a/18019
\gappto{\raggedright}{\hbadness=\@M}
\gappto{\RaggedRight}{\hbadness=\@M}
\gappto{\raggedleft}{\hbadness=\@M}
\gappto{\RaggedLeft}{\hbadness=\@M}
\gappto{\Centering}{\hbadness=\@M} % not \centering
\gappto{\flushleft}{\hbadness=\@M}
\gappto{\FlushLeft}{\hbadness=\@M}
\gappto{\flushright}{\hbadness=\@M}
\gappto{\FlushRight}{\hbadness=\@M}
\gappto{\Center}{\hbadness=\@M} % not \center
\RequirePackage{evenragged}
% Espaçamento entre linhas configurável (\singlespacing, \onehalfspacing etc.)
\RequirePackage{setspace}
% LaTeX às vezes coloca notas de rodapé logo após o final do texto da
% página ao invés de no final da página; este pacote evita isso e faz
% notas de rodapé funcionarem corretamente em títulos de seções.
% Esta package deve ser carregada depois de setspace.
\RequirePackage[stable,bottom]{footmisc}
% Melhora o espaçamento entre a nota de rodapé e a pontuação.
\RequirePackage{fnpct}
% Se uma página está vazia, não imprime número de página ou cabeçalho
\RequirePackage{emptypage}
% hyperref deve preferencialmente ser carregada próximo ao final
% do preâmbulo mas, para o caso de alguma package forçar a sua
% carga antes de executarmos \usepackage explicitamente, vamos
% garantir que estas opções estejam ativas.
\PassOptionsToPackage{
unicode=true,
pdfencoding=unicode,
plainpages=false,
pdfpagelabels,
bookmarksopen=true,
breaklinks=true,
%hyperfootnotes=false, % polui desnecessariamente com bordercolor
hyperindex=false, % Vamos cuidar disso "manualmente" TODO: ou voltar atrás
}{hyperref}
% Carrega nomes de cores disponíveis (podem ser usados com hyperref e listings)
\RequirePackage[hyperref,svgnames,x11names,table]{xcolor}
% LaTeX oferece 2 pares de comandos nativos para mudar textos para caixa
% alta ou baixa: \uppercase ou \lowercase (TeX "puro") e \MakeUppercase
% ou \MakeLowecase (LaTeX), mas esses comandos têm algumas limitações
% (https://tug.org/TUGboat/tb41-1/tb127wright-case.pdf ). Esta package
% define os comandos \MakeTextUppercase e \MakeTextLowercase que resolvem
% isso.
% TODO: quando TeXLive 2023 for a versão mais antiga de LaTeX a que
% estivermos dando suporte, podemos eliminar a package textcase
% e usar \MakeUppercase e \MakeLowercase diretamente. A partir
% dessa versão, essas macros usam \text_[upper|lower]case:n de
% expl3.
\RequirePackage{textcase}
\RequirePackage{geometry} % Permite definir o tamanho do papel, margens etc.
% Durante o processamento, LaTeX procura por arquivos adicionais necessários
% (tanto componentes do próprio LaTeX, como packages e fontes, quanto partes
% do conteúdo em si, como imagens carregadas com \includegraphics ou arquivos
% solicitados com \input ou \include) no diretório de instalação e também
% no diretório atual (ou seja, o diretório do projeto). Assim, normalmente
% é preciso usar caminhos relativos para incluir arquivos de subdiretórios:
% "\input{diretorio/arquivo}". No entanto, há duas limitações:
%
% 1. É necessário dizer "\input{diretorio/arquivo}" mesmo quando o arquivo
% que contém esse comando já está dentro do subdiretório.
%
% 2. Isso não deve ser usado para packages ("\usepackage{diretorio/package}"),
% embora na prática funcione.
%
% Há três maneiras recomendadas de resolver esses problemas:
%
% 1. Acrescentando os diretórios desejados ao arquivo texmf.cnf
%
% 2. Acrescentando os diretórios desejados às variáveis de ambiente
% TEXINPUTS e BSTINPUTS
%
% 3. Colocando os arquivos adicionais na árvore TEXMF (geralmente, no
% diretório texmf dentro do diretório do usuário).
%
% Essas soluções, no entanto, não podem ser automatizadas por este modelo
% e são um tanto complicadas para usuários menos experientes. Veja mais a
% respeito na seção 5 de "texdoc kpathsea" e em
% https://www.overleaf.com/learn/latex/Articles/An_introduction_to_Kpathsea_and_how_TeX_engines_search_for_files .
%
% A package import pode solucionar o primeiro problema, mas exige o uso
% de outro comando no lugar de \input, então não a usamos aqui.
%\RequirePackage{import}
%
% Uma solução mais simples é acrescentar os diretórios desejados à macro
% \input@path, originalmente criada para resolver um problema relacionado
% à portabilidade. Seu uso não é normalmente recomendado por razões de
% desempenho, mas no nosso caso (em que adicionamos apenas um diretório
% com poucos arquivos e com máquinas modernas) isso não é um problema. Veja
% https://tex.stackexchange.com/questions/241828/define-path-for-packages-in-the-latex-file-analog-of-inputpath-or-graphicspa#comment705011_241832
%\csappto{input@path}{{extras/}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LÍNGUAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Babel permite definir a língua ou línguas usadas no documento e deve
% ser um dos primeiros pacotes a serem carregados. É possível definir
% as línguas como parâmetro aqui ou ao carregar a classe, no início do
% documento. A definição ao carregar a classe é uma opção melhor, pois
% algumas outras packages além de babel também utilizam essa informação.
%
% A escolha da língua afeta quatro coisas:
%
% 1. A internacionalização das palavras criadas automaticamente, como
% "Capítulo/Chapter", "Sumário/Table of Contents" etc. - babel chama
% essas palavras de "captions";
%
% 2. A hifenização das palavras;
%
% 3. Algumas convenções tipográficas. Por exemplo, em francês é usual
% acrescentar um espaço antes de caracteres como "?" e "!"; línguas
% diferentes usam caracteres diferentes para as aspas tipográficas;
% com algumas línguas asiáticas, pode ser necessário utilizar uma
% fonte diferente etc.;
%
% 4. Atalhos (shorthands) - algumas línguas definem "atalhos" (shorthands"),
% ou seja, tratam alguns caracteres como comandos especiais; por exemplo,
% em francês o espaço que é colocado antes da exclamação funciona porque
% o caracter "!" é, na verdade, um comando.
%
%%%% MUDANDO A LÍNGUA E HIFENIZAÇÃO %%%%
%
% Cada documento tem uma língua padrão; quando usamos pequenos trechos em
% outra língua, como por exemplo em citações, queremos alterar apenas os
% aspectos 2, 3 e 4; nesse caso, a troca da língua deve ser feita com
% \foreignlanguage{língua}{texto} ou com \begin{otherlanguage*}{língua}.
% Para alterar todos os quatro aspectos, deve-se usar \selectlanguage{língua}
% (que altera a língua padrão a partir desse ponto) ou
% \begin{otherlanguage}{língua}{texto}, que faz a alteração apenas até
% \end{otherlanguage}. Se você quiser apenas desabilitar a hifenização de
% um trecho de texto, pode usar \begin{hyphenrules}{nohyphenation}.
% Finalmente, com \babeltags é possível definir comandos curtos como
% "\textbr" (para "brazilian") que são equivalentes a \foreignlanguage.
%
%%%% PERSONALIZANDO CAPTIONS %%%%
%
% É possível personalizar os captions. Para versões de babel a partir
% de 3.51 (lançada em outubro de 2020), basta fazer
% \setlocalecaption{english}{contents}{Table of Contents}. Com versões
% anteriores, por razões históricas há dois mecanismos para fazer isso,
% então é preciso checar qual deve ser usado para cada língua (veja a
% documentação de babel ou faça um teste). São eles:
%
% 1. \renewcommand\spanishchaptername{Capítulo}
%
% 2. \addto\captionsenglish{\renewcommand\contentsname{Table of Contents}}
% (este é o mais comum)
%
% Esses métodos valem também para a bibliografia, mas apenas se você
% estiver usando bibtex; com biblatex, é melhor usar o comando
% "\DefineBibliographyStrings" (veja a documentação de biblatex).
%
% Quando babel faz uma troca de língua, ele executa \extraslíngua e, se for
% necessário trocar os "captions", \captionslíngua (ou seja, os comandos
% acima modificam \captionslíngua). Então, se você quiser executar algo a
% mais quando uma língua é selecionada, faça \addto\extrasenglish{\blah}.
\RequirePackage{babel}
\RequirePackage{iflang}
% Alguns pacotes (tikz, siunitx) usam, além de babel, este pacote como
% auxiliar para a tradução de palavras-chave, como os meses do ano.
\RequirePackage{translator}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% ENCODINGS E CARACTERES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% TUDO QUE VOCÊ NÃO QUERIA SABER SOBRE FONTENC %%%%%%%%%%
%
% Você só precisa ler este trecho se estiver curioso sobre isto :)
%
% Primeiro, terminologia: os diferentes tipos de letras (como Times, Arial,
% Comic Sans etc.) são chamados famílias tipográficas. Os arquivos que contêm
% as informações necessárias para o computador manipular os caracteres de
% uma família são chamados de fontes. É comum usar "fonte" para se referir
% à família tipográfica, mas aqui esta distinção é importante, como veremos
% a seguir.
%
% Fontes "tradicionais" (tanto as fontes originais de TeX quanto fontes
% PostScript Type 1 ou TrueType) são capazes de armazenar no máximo 256
% caracteres diferentes. Isso é um problema por duas razões:
%
% 1. Uma família tipográfica completa deve incluir, além dos caracteres em
% sua forma "normal", versões em itálico, negrito, negrito + itálico,
% versalete, versalete + itálico, versalete + negrito etc.
%
% 2. Existem muito mais de 256 caracteres: além dos números, letras latinas
% maiúsculas e minúsculas, há caracteres gregos, cirílicos, árabes etc.
%
% Os dois problemas são resolvidos da mesma forma: usamos vários arquivos
% (fontes) para uma mesma família tipográfica. Para o primeiro problema,
% criamos uma fonte separada para cada variação no formato dos caracteres;
% Para o segundo problema, criamos uma fonte separada para cada subconjunto
% de caracteres que atendem um determinado sistema de escrita (por exemplo,
% o alfabeto latino). Note que isso significa que alguns caracteres, como
% os números arábicos, são repetidos em algumas fontes por serem usados em
% mais de um sistema de escrita. Note também que uma dada família pode
% não incluir caracteres em negrito e, portanto, não incluir a fonte
% correspondente. Da mesma forma, uma família pode não incluir caracteres
% cirílicos e, portanto, não incluir a fonte correspondente (na prática,
% a maioria das famílias tipográficas incluem suporte a apenas um sistema
% de escrita).
%
% Há um conjunto de padrões que determinam quais são os caracteres que
% devem ser incluídos em cada fonte de acordo com o sistema de escrita
% desejado: são os "character encodings". Por exemplo, as fontes com o
% alfabeto latino (as mais usadas no Brasil, EUA e Europa ocidental)
% usam o "character encoding" ISO-8859-1 (ou similares, como "latin1",
% "Windows-1252" e "ECMA-94"); outras línguas e regiões utilizam outros
% padrões. Mas TeX nasceu antes que esses padrões fossem definidos e,
% portanto, criou seus próprios padrões (encodings). O resultado é que,
% obviamente, os encodings de LaTeX são incompatíveis com os demais.
% Por essa razão, LaTeX tradicionalmente não era capaz de usar fontes
% "comuns"; elas precisavam ser adaptadas para funcionar com LaTeX (como
% veremos abaixo, isso mudou com XeLaTeX/luaLaTeX).
%
% LaTeX chama de "fontenc" os "character encodings" de cada fonte. As
% fontes mais comumente usadas hoje para o alfabeto latino usam o fontenc
% "T1". Por padrão, LaTeX "entende" os fontenc's T1 e OT1, mas é possível
% carregar outros (para línguas como cirílico ou árabe) com a package
% fontenc. Além de acrescentar fontenc's, a package também define qual
% deles é o padrão (o último da lista). Diferentemente de outras, essa
% package pode ser chamada mais de uma vez com parâmetros diferentes para
% carregar mais fontenc's ou para alterar o fontenc default. Esse default
% é importante porque, quando uma família tipográfica oferece fontes com
% diferentes fontenc's, o default determina qual delas deverá ser usada no
% documento. Sem a package fontenc, o default é OT1, mas esse fontenc não é
% recomendado porque ele só dá suporte de fato a 128 caracteres; caracteres
% acentuados são construídos sobrescrevendo um caracter "acento" sobre
% o caracter da letra, com resultados visualmente pobres. Assim, quando
% estiver usando pdflatex, sempre utilize o fontenc T1.
%
% "Character encodings" são usados para outros fins além da codificação
% dos caracteres em fontes e são fundamentais para línguas diferentes do
% inglês, mas acabam gerando problemas de compatibilidade. Por conta
% disso, surgiram o UTF-8 (um "character encoding" capaz de representar
% todos os caracteres possíveis) e o formato de fontes "OTF", capaz de
% armazenar 65.536 caracteres. XeLaTeX e luaLaTeX foram criados para
% tirar proveito desses avanços: ao usar uma fonte OTF, esses programas
% usam o fontenc "TU", que nada mais é que uma "cópia" do encoding padrão
% das fontes OTF que cobre todos os caracteres. Com isso, as fontes OTF
% disponíveis no sistema podem ser usadas diretamente, sem a necessidade
% de adaptações, e não é preciso carregar a package fontenc, porque
% fontspec já faz isso.
%
% E por que isso tudo é importante? Porque cada versão de LaTeX só é capaz
% de hifenizar palavras acentuadas corretamente com um fontenc específico:
% pdflatex, com fontenc T1; luaLaTeX e XeLaTeX, com fontenc TU. Assim,
% embora seja possível usar uma fonte com fontenc T1 e processar o documento
% com luaLaTeX, isso não é recomendado porque palavras acentuadas não serão
% hifenizadas (mas serão hifenizadas usando pdflatex). De maneira similar,
% o fontenc OT1, embora seja o default, não é recomendado.
\ifPDFTeX
\RequirePackage[T1]{fontenc} % fontenc padrão recomendado para texto latino
% O texto está escrito em utf8.
% TODO: remover após ubuntu 18.04 se tornar obsoleta (abril/2023),
% veja o comentário em \NeedsTexFormat
\RequirePackage[utf8]{inputenc}
% Várias packages que definem as fontes do documento carregam fontaxes
% porque ela oferece diversos recursos para a criação da package, mas
% carregamos aqui porque, mesmo com fontes que não a usam diretamente,
% ela permite utilizar small caps + itálico. Algumas raras packages de
% fontes podem causar conflitos com fontaxes, em geral por utilizarem
% a package "concorrente" nfssext-cfr.
%
% TODO A funcionalidade pela qual faz sentido carregar fontaxes aqui
% (small caps + itálico) foi incorporada ao kernel do LaTeX na
% versão 2020-02-02, então está em TeXLive 2021. Remover isto
% quando arxiv usar TeXLive >= 2021 e ubuntu 20.04 (focal) for
% descontinuada (abril de 2025). As packages que precisam de
% fontaxes por outras razões podem continuar a carregá-la sem
% problemas, mas não precisamos fazer isso aqui.
\RequirePackage{fontaxes}
% LaTeX substitui algumas sequências de caracteres, como "fi", "fl" e
% outras, por caracteres especiais ("ligaduras"). Para que seja possível
% fazer copiar/colar ou buscas por textos contendo essas ligaduras, o
% arquivo PDF precisa conter uma tabela indicando quais são elas. Com
% fontes OTF (LuaLaTeX ou XeLaTeX) isso não costuma ser um problema, mas
% com pdfLaTeX pode ser. Estes dois comandos (que só existem no pdfLaTeX)
% incluem uma tabela genérica que funciona para a maioria das fontes. Veja
% a seção 5 de http://www.tug.org/TUGboat/Articles/tb29-1/tb91thanh-fonts.pdf
% Note que alguns visualizadores de PDF tentam "adivinhar" o conteúdo da
% tabela quando ela está incompleta ou não existe, então copiar/colar e
% buscas podem funcionar em alguns visualizadores (não todos) mesmo sem
% estes comandos.
%
% TODO Isto foi incluído no kernel do LaTeX versão 2021-06-01,
% então está em TeXLive 2022. Remover isto quando arxiv
% usar TeXLive >= 2022 e ubuntu 22.04 (jammy) for
% descontinuada (abril de 2027).
\input glyphtounicode.tex
\pdfgentounicode=1
\else
% Não é preciso carregar inputenc com LuaTeX e XeTeX, pois
% com eles utf8 é obrigatório.
% TODO: remover este comentário ao remover inputenc acima
% TODO: acrescentar menção a isso no trecho do texto de
% exemplo que fala sobre documentação obsoleta
% Com XeLaTeX e luaLaTeX, não é preciso usar a package fontenc; a package
% fontspec carrega o fontenc TU (mencionado acima) automaticamente.
\RequirePackage{fontspec}
% Ao invés de usar o sistema tradicional de LaTeX para gerir as fontes
% matemáticas, esta package faz LaTeX utilizar as extensões matemáticas
% do formato otf definidas pela microsoft. Ao ativar esta package, o
% mecanismo tradicional não funciona mais! Há poucas fontes com suporte
% a unicode-math, então provavelmente *não* é uma boa ideia carregar
% esta package aqui; melhor deixar que a package de fontes com suporte
% a unicode-math faça isso, como é o caso da package libertinus. Mas
% pode ser interessante ler a documentação desta package, já que ela
% oferece algumas melhorias em relação ao sistema "tradicional" de LaTeX.
%\RequirePackage{unicode-math}
\fi
% Acesso a símbolos adicionais, como \textrightarrow, \texteuro etc.,
% disponíveis na maioria das fontes através do fontenc TS1 ou mudando
% momentaneamente para computer modern/latin modern. Raramente útil
% com lualatex/xelatex, mas não causa problemas. Várias packages de
% fontes carregam textcomp, às vezes com opções específicas; assim,
% para evitar problemas, vamos carregá-la no final do preâmbulo para
% o caso de ela não ter sido carregada antes.
%
% TODO A funcionalidade oferecida por textcomp foi incorporada ao kernel
% do LaTeX na versão 2020-02-02, então está em TeXLive 2021. Remover
% isto quando arxiv usar TeXLive >= 2021 e ubuntu 20.04 (focal) for
% descontinuada (abril de 2025). As packages que precisam de textcomp
% podem continuar a carregá-la sem problemas, mas não precisamos fazer
% isso aqui.
\AtBeginDocument{\usepackage{textcomp}}
% LaTeX usa por default a família de fontes "Computer Modern". Essas fontes
% precisaram ser re-criadas diversas vezes em formatos diferentes, então há
% diversas variantes dela. Com o fontenc OT1 (default "ruim" do LaTeX, como
% explicado mais acima), a versão usada é a BlueSky Computer Modern, que é
% de boa qualidade, mas com os problemas do OT1. Com fontenc T1 (padrão deste
% modelo e recomendado com pdfLaTeX), LaTeX usa o conjunto "cm-super". Com
% fontspec (ou seja, com LuaLaTeX e XeLaTeX), LaTeX utiliza a versão "Latin
% Modern". Versões diferentes dessas fontes foram recomendadas como sendo
% "a melhor" ao longo do tempo; atualmente, a recomendada é "Latin Modern",
% mesmo com pdflatex.
\ifPDFTeX
% Usando pdfLaTeX
% Ativa Latin Modern como a fonte padrão.
\RequirePackage{lmodern}
% Alguns truques para melhorar a aparência das fontes Latin Modern;
% eles não funcionam com LuaLaTeX e XeLaTeX.
% Latin Modern não tem fontes bold + Small Caps, mas cm-super sim;
% assim, vamos ativar o suporte às fontes cm-super (sem ativá-las
% como a fonte padrão do documento) e configurar substituições
% automáticas para que a fonte Latin Modern seja substituída por
% cm-super quando o texto for bold + Small Caps.
\RequirePackage{fix-cm}
% Com Latin Modern, é preciso incluir substituições para o encoding TS1
% também por conta dos números oldstyle, porque para inclui-los nas fontes
% computer modern foi feita uma hack: os dígitos são declarados como sendo
% os números itálicos da fonte matemática e, portanto, estão no encoding TS1.
%
% Primeiro forçamos o LaTeX a carregar a fonte Latin Modern (ou seja, ler
% o arquivo que inclui "DeclareFontFamily") e, a seguir, definimos a
% substituição
\fontencoding{TS1}\fontfamily{lmr}\selectfont
\DeclareFontShape{TS1}{lmr}{b}{sc}{<->ssub * cmr/bx/n}{}
\DeclareFontShape{TS1}{lmr}{bx}{sc}{<->ssub * cmr/bx/n}{}
\fontencoding{T1}\fontfamily{lmr}\selectfont
\DeclareFontShape{T1}{lmr}{b}{sc}{<->ssub * cmr/bx/sc}{}
\DeclareFontShape{T1}{lmr}{bx}{sc}{<->ssub * cmr/bx/sc}{}
% Latin Modern não tem "small caps + itálico", mas tem "small caps + slanted";
% vamos definir mais uma substituição aqui.
\fontencoding{T1}\fontfamily{lmr}\selectfont % já feito acima, mas tudo bem
\DeclareFontShape{T1}{lmr}{m}{scit}{<->ssub * lmr/m/scsl}{}
\DeclareFontShape{T1}{lmr}{bx}{scit}{<->ssub * lmr/bx/scsl}{}
% Se fizermos mudanças manuais na fonte Latin Modern, estes comandos podem
% vir a ser úteis
%\newcommand\lmodern{%
% \renewcommand{\oldstylenums}[1]{{\fontencoding{TS1}\selectfont ##1}}%
% \fontfamily{lmr}\selectfont%
%}
%
%\DeclareRobustCommand\textlmodern[1]{%
% {\lmodern #1}%
%}
\else
% Com LuaLaTex e XeLaTeX, Latin Modern é a fonte padrão. Existem
% diversas packages e "truques" para melhorar alguns aspectos de
% Latin Modern, mas eles foram feitos para pdflatex (veja mais
% acima). Assim, se você pretende usar Latin Modern como a fonte
% padrão do documento, é melhor usar pdfLaTeX. Deve ser possível
% implementar essas melhorias com fontspec também, mas este modelo
% não faz isso, apenas ativamos Small Caps aqui.
%
% TODO: isso funciona automaticamente em versões recentes do LaTeX;
% Remover essa correção para LuaLaTeX e XeLaTeX quando arxiv
% usar TeXLive >= 2021 e ubuntu 20.04 (focal) for descontinuada
% (abril de 2025).
\ifLuaTeX
% Com LuaTeX, basta indicar o nome de cada fonte; para descobrir
% o nome "certo", use o comando "otfinfo -i" e veja os itens
% "preferred family" e "full name"
\setmainfont{Latin Modern Roman}[
SmallCapsFont = {LMRomanCaps10-Regular},
ItalicFeatures = {
SmallCapsFont = {LMRomanCaps10-Oblique},
},
SlantedFont = {LMRomanSlant10-Regular},
SlantedFeatures = {
SmallCapsFont = {LMRomanCaps10-Oblique},
BoldFont = {LMRomanSlant10-Bold}
},
]
\fi
\ifXeTeX
% Com XeTeX, é preciso informar o nome do arquivo de cada fonte.
\setmainfont{lmroman10-regular.otf}[
SmallCapsFont = {lmromancaps10-regular.otf},
ItalicFeatures = {
SmallCapsFont = {lmromancaps10-oblique.otf},
},
SlantedFont = {lmromanslant10-regular.otf},
SlantedFeatures = {
SmallCapsFont = {lmromancaps10-oblique.otf},
BoldFont = {lmromanslant10-bold.otf}
},
]
\fi
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FIGURAS / FLOATS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LaTeX escolhe automaticamente o "melhor" lugar para colocar cada float.
% Por padrão, ele tenta colocá-los no topo da página e depois no pé da
% página; se não tiver sucesso, vai para a página seguinte e recomeça.
% Se esse algoritmo não tiver sucesso "logo", LaTeX cria uma página só
% com floats. É possível modificar esse comportamento com as opções de
% posicionamento: "tp", por exemplo, instrui LaTeX a considerar apenas
% o topo da página ou uma página só de floats (ignorando o pé da página),
% e "htbp" o instrui para tentar "aqui" como a primeira opção. A ordem
% dessas opções não é relevante: dentre as opções disponíveis, LaTeX sempre
% tenta a ordem "aqui, topo, pé, página". Os pacotes "float" e "floatrow"
% acrescentam a opção "H", que significa "aqui, incondicionalmente". Nesse
% caso, a figura/tabela não é mais um float "de verdade" (já que o seu lugar
% é fixo) e seria possível carregar a imagem sem usar o float; a diferença
% é que, com floats, a numeração das figuras/tabelas funciona corretamente.
%
% A escolha do "melhor" lugar leva em conta os parâmetros abaixo, mas é
% possível ignorá-los com a opção de posicionamento "!". Dado que os
% valores default não são muito bons para floats "grandes" ou documentos
% com muitos floats, é muito comum usar "!" ou "H". No entanto, modificando
% estes parâmetros o algoritmo automático tende a funcionar melhor. Ainda
% assim, vale ler a discussão a respeito na seção "Limitações do LaTeX"
% deste modelo.
% Fração da página que pode ser ocupada por floats no topo. Default: 0.7
\renewcommand{\topfraction}{.8}
% Idem para documentos em colunas e floats que tomam as 2 colunas. Default: 0.7
%\renewcommand{\dbltopfraction}{.7}
% Fração da página que pode ser ocupada por floats no pé. Default: 0.3
%\renewcommand{\bottomfraction}{.3}
% Fração mínima da página que deve conter texto. Default: 0.2
%\renewcommand{\textfraction}{.2}
% Numa página só de floats, fração mínima que deve ser ocupada. Default: 0.5
% floatpagefraction *deve* ser menor que topfraction.
\renewcommand{\floatpagefraction}{.66}
% Idem para documentos em colunas e floats que tomam as 2 colunas. Default: 0.5
\renewcommand{\dblfloatpagefraction}{.66}
% Máximo de floats no topo da página. Default: 2
\setcounter{topnumber}{3}
% Idem para documentos em colunas e floats que tomam as 2 colunas. Default: 2
%\setcounter{dbltopnumber}{2}
% Máximo de floats no pé da página. Default: 1
\setcounter{bottomnumber}{2}
% Máximo de floats por página. Default: 3
\setcounter{totalnumber}{5}
% A package float é amplamente utilizada; ela permite definir novos tipos
% de float e também acrescenta a possibilidade de definir "H" como opção de
% posicionamento do float, que significa "aqui, incondicionalmente". No
% entanto, ela tem algumas fragilidades e não é atualizada desde 2001.
% floatrow é uma versão aprimorada e com mais recursos da package "float",
% mas também não é atualizada desde 2009. Aqui utilizamos alguns recursos
% disponibilizados por ambas e é possível escolher qual delas utilizar.
% Um dos principais recursos dessas packages é permitir a criação de novos
% tipos de float; veja o arquivo source-code.tex para um exemplo.
%\RequirePackage{float}
\RequirePackage{floatrow}
% Por padrão, LaTeX prefere colocar floats no topo da página que
% onde eles foram definidos; vamos mudar isso. Este comando depende
% do pacote "floatrow", carregado logo acima.
\floatplacement{table}{htbp}
\floatplacement{figure}{htbp}
% Em alguns casos, um float pode aparecer antes do local do texto em que
% foi definido (ou seja, no topo da página ao invés do meio da página).
% Esta package garante que floats (tabelas e figuras) só apareçam após
% o local no texto em que foram definidos; veja os detalhes em
% https://tex.stackexchange.com/a/297580 . Note que, se o float tem a
% opção "h", normalmente LaTeX *não* coloca o float no topo da página
% atual: se o float não pode ser colocado "here", ele é delegado para
% a página seguinte. Portanto, com a opção "h" flafter em geral não faz
% diferença.
\RequirePackage{flafter}
% Faz o algoritmo de colocação de floats um pouco mais "esperto".
\RequirePackage{fewerfloatpages}
% Em documentos com duas colunas, floats normalmente são colocados como
% parte de uma das colunas. No entanto, é possível usar "\begin{figure*}"
% ou "\begin{table*}" para criar floats que ocupam as duas colunas. Floats
% "duplos" desse tipo têm algumas limitações:
%
% 1. Mesmo que haja espaço disponível na página atual, eles são sempre
% inseridos na página seguinte ao lugar em que foram definidos (então
% é comum defini-los antes do lugar "certo" para compensar isso)
%
% 2. Eles só podem aparecer no topo da página ou em uma página de floats,
% ou seja, nunca "here" nem no pé da página.
%
% 3. Em alguns casos, eles podem aparecer fora da ordem em relação aos
% demais floats do mesmo tipo (o que não acontece com floats "normais")
%
% Esta package:
%
% 1. Soluciona parcialmente o primeiro problema: floats "duplos" podem
% aparecer na página em que são definidos se sua definição está contida
% no texto da coluna da esquerda;
%
% 2. Soluciona o segundo problema: floats "duplos" podem aparecer tanto no
% topo quanto no pé da página. Observe que eles *não* podem aparecer
% "here" porque isso não faz sentido: a figura interromperia o fluxo
% do texto da "outra" coluna (ainda assim, as packages midfloat e cuted
% permitem fazer isso).
%
% 3. Soluciona o terceiro problema.
\RequirePackage{stfloats}
% Permite importar figuras. LaTeX "tradicional" só é capaz de trabalhar com
% figuras EPS; hoje em dia não há nenhuma boa razão para usar essa versão.
% Já pdfTeX, XeTeX e LuaTeX podem usar figuras nos formatos PDF, JPG e PNG.
% Em algumas instalações, essas versões conseguem converter automaticamente
% arquivos EPS para PDF, mas não isso é garantido, então é melhor evitar o
% formato EPS.
\RequirePackage{graphicx}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%% HIPERLINKS E REFERÊNCIAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O comando \ref por padrão mostra apenas o número do elemento a que se
% refere; assim, é preciso escrever "veja a Figura~\ref{grafico}" ou
% "como visto na Seção~\ref{sec:introducao}". Usando o pacote hyperref
% (carregado mais abaixo), esse número é transformado em um hiperlink.
%
% Se você quiser mudar esse comportamento, ative as packages varioref
% e cleveref e também as linhas "labelformat" e "crefname" mais abaixo.
% Nesse caso, você deve escrever apenas "veja a \ref{grafico}" ou
% "como visto na \ref{sec:introducao}" etc. e o nome do elemento será
% gerado automaticamente como hiperlink.
%
% Se, além dessa mudança, você quiser usar os recursos de varioref ou
% cleveref, mantenha as linhas labelformat comentadas e use os comandos
% \vref ou \cref, conforme sua preferência, também sem indicar o nome do
% elemento, que é inserido automaticamente. Vale lembrar que o comando
% \vref de varioref pode causar problemas com hyperref, impedindo a
% geração do PDF final.
%
% ATENÇÃO: varioref, hyperref e cleveref devem ser carregadas nessa ordem!
%\RequirePackage{varioref}
%\labelformat{figure}{Figura~#1}
%\labelformat{table}{Tabela~#1}
%\labelformat{equation}{Equação~#1}
%% Isto não funciona corretamente com os apêndices; o comando seguinte
%% contorna esse problema
%%\labelformat{chapter}{Capítulo~#1}
%\labelformat{chapter}{\@chapapp~#1}
%\labelformat{section}{Seção~#1}
%\labelformat{subsection}{Seção~#1}
%\labelformat{subsubsection}{Seção~#1}
% Cria hiperlinks para capítulos, seções, \ref's, URLs etc.
\RequirePackage{hyperref}
% Add "http://" for URLs that do not include the scheme (http/https/ftp etc.)
\ExplSyntaxOn
\DeclareUrlCommand\httpurl{
\def\UrlLeft##1\UrlRight{
\regex_match:nnTF{^[[:alpha:]][[:alnum:].+\-]{2,12}://}{##1}
{\href{##1}{##1}}
{\href{http\c_colon_str//##1}{##1}}
}
}
\ExplSyntaxOff
%\RequirePackage[nameinlink,noabbrev,capitalise]{cleveref}
%% cleveref não tem tradução para o português
%\crefname{figure}{Figura}{Figuras}
%\crefname{table}{Tabela}{Tabelas}
%\crefname{chapter}{Capítulo}{Capítulos}
%\crefname{section}{Seção}{Seções}
%\crefname{subsection}{Seção}{Seções}
%\crefname{subsubsection}{Seção}{Seções}
%\crefname{appendix}{Apêndice}{Apêndices}
%\crefname{subappendix}{Apêndice}{Apêndices}
%\crefname{subsubappendix}{Apêndice}{Apêndices}
%\crefname{line}{Linha}{Linhas}
%\crefname{subfigure}{Figura}{Figuras}
%\crefname{equation}{Equação}{Equações}
%\crefname{listing}{Código-fonte}{Códigos-fonte}
%\crefname{lstlisting}{Código-fonte}{Códigos-fonte}
%\crefname{lstnumber}{Linha}{Linhas}
%\crefrangelabelformat{chapter}{#3#1#4~a~#5#2#6}
%\crefrangelabelformat{section}{#3#1#4~a~#5#2#6}
%\newcommand{\crefrangeconjunction}{ e }
%\newcommand{\crefpairconjunction}{ e }
%\newcommand{\crefmiddleconjunction}{, }
%\newcommand{\creflastconjunction}{ e }
%\crefmultiformat{type}{first}{second}{middle}{last}
%\crefrangemultiformat{type}{first}{second}{middle}{last}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% METADADOS XMP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% XMP (eXtensible Metadata Platform) é um mecanismo proposto pela Adobe
% para a inclusão dos metadados de um documento no próprio documento.
% Esta package se integra com hyperref e não depende de praticamente
% nenhuma modificação em documentos que já utilizam os mecanismos de
% hyperref para a definição de metadados PDF. Ela deve ser carregada
% depois de hyperref mas antes de as opções relacionadas a metadados
% de hyperref serem definidas.
% HACK ALERT! As versões 5.5 e 5.6 de hyperxmp podem "confundir" latexmk,
% fazendo a compilação do documento entrar em um laço infinito. Essas
% versões, assim como a 5.7 que corrige o problema, foram incluídas no
% TeXLive durante o ano de 2020, ou seja, nem a primeira versão nem a
% última atualização de TeXLive 2020 são afetadas. Ainda assim, aqui
% contornamos o problema desabilitando o recurso relacionado (o cálculo
% automático de "byteCount", ou seja, do tamanho aproximado do documento).
% TODO: remover esse código após 2024.
\ifPDFTeX
\LetLtxMacro\HACKoldpdffilesize\pdffilesize
\renewcommand\pdffilesize[1]{}
\fi
\RequirePackage{hyperxmp}
\ifPDFTeX
\LetLtxMacro\pdffilesize\HACKoldpdffilesize
\fi
% HACK ALERT! hyperxmp usa atenddvi, que tem este bug:
% https://github.com/ho-tex/atenddvi/issues/1 . Aparentemente, ele não
% afeta xelatex (cf https://github.com/latex3/latex2e/issues/94 ), então
% só precisamos nos preocupar com pdflatex e lualatex. Com pdflatex,
% hyperxmp não deveria utilizar atenddvi, mas às vezes usa. Com lualatex,
% atenddvi parece também não ser necessária, pois hyperxmp não usa
% \special ou \write com lualatex. Então, vamos deixar hyperxmp carregar
% atenddvi mas (1) vamos impedi-la de funcionar e (2) vamos garantir que
% hyperxmp sempre use AtEndDocument com pdflatex e lualatex. Há ainda um
% outro truque para contornar esse problema na configuração da bibliografia,
% mas não podemos ter certeza de que apenas a bibliografia pode ser afetada
% por este bug.
% TODO: esse bug foi resolvido com o lançamento do LaTeX 2020-10-01, que
% deve ser incluído no TeXlive 2021. Assim, provavelmente podemos
% remover isto em abril/2025 (veja o comentário em \NeedsTeXFormat)
\ifXeTeX
\else
\let\AtEndDvi@AtBeginShipout\relax
\let\AtEndDvi@CheckImpl\relax
\let\hyxmp@at@end\AtEndDocument
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UTILS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Você provavelmente vai querer ler a documentação de alguns destes pacotes
% para personalizar algum aspecto do trabalho ou usar algum recurso específico.
% Mais recursos para trechos de texto "puro" (texto em que tabs, quebras de
% linha etc. não são modificados), e também o ambiente "\begin{comment}".
\RequirePackage{verbatim}
\RequirePackage{fvextra} % Ainda mais recursos adicionais para texto "puro";
% precisa ser carregada antes de csquotes.
% Às vezes um float pode ser adiado por muitas páginas; é possível forçar
% LaTeX a imprimir todos os floats pendentes com o comando \clearpage mas,
% para isso, o usuário deve identificar os casos problemáticos e inserir
% \clearpage manualmente. Esta package acrescenta o comando \FloatBarrier,
% que executa \clearpage apenas se necessário no local em que é chamado.
% "above" e "below" desabilitam a barreira quando os floats estão na mesma
% página. A desvantagem de placeins é que, para funcionar, ela gera quebras
% de página que muitas vezes são inesperadas; em muitos casos, é melhor
% fazer ajustes manualmente.
%\RequirePackage[above,below]{placeins}
% Às vezes é interessante utilizar uma imagem mais larga que o texto.
% Por padrão, \centering *não* vai centralizar a imagem corretamente
% nesse caso. Com esta package, podemos acrescentar a opção "center"
% ao comando \includegraphics para resolver esse problema:
% \noindent\includegraphics[width=1.2\textwidth,center]{imagem}.
% A package tem muitos outros recursos também.
\RequirePackage[export]{adjustbox}
% Define o ambiente "\begin{landscape} -- \end{landscape}"; o texto entre
% esses comandos é impresso em modo paisagem, podendo se estender por
% várias páginas. A rotação não inclui os cabeçalhos e rodapés das páginas.
% O principal uso desta package é em conjunto com a package longtable: se
% você precisa mostrar uma tabela muito larga (que precisa ser impressa em
% modo paisagem) e longa (que se estende por várias páginas), use
% "\begin{landscape}" e "\begin{longtable}" em conjunto. Note que o modo
% landscape entra em ação imediatamente, ou seja, "\begin{landscape}" gera
% uma quebra de página no local em que é chamado. Na maioria dos casos, o
% que se quer não é isso, mas sim um "float paisagem"; isso é o que a
% package rotating oferece (veja abaixo).
\RequirePackage{pdflscape}
% Define dois novos tipos de float: sidewaystable e sidewaysfigure, que
% imprimem a figura ou tabela sozinha em uma página em modo paisagem. Além
% disso, permite girar elementos na página de diversas outras maneiras.
\RequirePackage[figuresright,clockwise]{rotating}
% Sub-figuras (e seus captions) - observe que existe uma package chamada
% "subfigure", mas ela é obsoleta; use esta no seu lugar.
\RequirePackage{subcaption}