Neste repositório apresento uma forma de organizar slides de aulas com LaTeX e git. A ideia é que cada aula tenha seu próprio diretório, facilitando a organização e o versionamento do código fonte dos slides.
Abaixo é apresentada a estrutura proposta. No exemplo, tem-se duas aulas, cada qual em seu próprio diretório.
.
├── 0-ifscyan
│ ├── beamerthemeifscyan.sty
│ └── figs
│ └── ifsclogo.pdf
├── aula-01
│ ├── .latexmkrc
│ ├── aula-01.tex
│ └── figs
│ └── git-branch.png
└── aula-02
├── .latexmkrc
└── aula-02.tex
O diretório 0-ifscyan
contém o tema Beamer personalizado beamerthemeifscyan.sty
e a imagem do logo do IFSC. Os diretórios aula-01
e aula-02
contêm os arquivos .tex
de cada aula, além de um subdiretório figs
para armazenar as imagens utilizadas em cada aula.
O arquivo .latexmkrc
é utilizado para configurar o latexmk
, uma ferramenta que automatiza a compilação de documentos LaTeX, permitindo compilar os arquivos .tex
e gerar os PDFs correspondentes.
Neste exemplo, o arquivo .latexmkrc
dentro de cada diretório de aula contém apenas a definição da variável TEXINPUTS, que indica onde estão os arquivos de entrada do LaTeX, ou seja, para onde procurar os arquivos .sty
e outros arquivos de estilo do Beamer usados nos slides.
Você pode compilar cada aula separadamente com o comando latexmk
:
cd aula-01
latexmk -outdir=outlatexdir -pdf aula-01.tex
O Overleaf também possui suporte ao latexmk
, então você pode carregar essa estrutura de diretórios no Overleaf e compilar os slides diretamente lá.
Outra opção é usar o Visual Studio Code com a extensão LaTeX Workshop para compilar os slides localmente em seu computador. É necessário ter o LaTeX instalado, como o TeX Live ou o MiKTeX.
Abaixo um exemplo de slides gerado com o modelo presente nesse repositório.
O Visual Studio Code possui a extensão LaTeX Workshop que o torna uma IDE LaTeX. Abaixo deixo algumas configurações pessoais que criei para facilitar a edição de slides LaTeX/Beamer com o Visual Studio Code.
Da forma que fiz, ao salvar um documento, o VSCode irá automaticamente compilar e gerar o PDF. A visualização do PDF ficará no painel lateral (precisará clicar no ícone na parte superior da direita).
Abra o Visual Studio Code, vá em Preferences -> Settings. Mude para o modo que visualiza o conteúdo do arquivo settings.json
(basta clicar em ícone que fica na parte superior do lado direito). Por fim, adicione o seguinte trecho dentro do bloco já existente.
{
"latex-workshop.bibtex-fields.sort.enabled": true,
"latex-workshop.bibtex-format.sort.enabled": true,
"latex-workshop.latex.clean.subfolder.enabled": true,
"latex-workshop.latex.outDir": "%DIR%/outlatexdir",
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.view.pdf.zoom": "page-width",
"latex-workshop.synctex.afterBuild.enabled": true,
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true,
"**/*.class": true,
"**/*.bbl": true,
"**/*.bcf": true,
"**/*.nav": true,
"**/*.snm": true,
"**/*.aux": true,
"**/*.fls": true,
"**/*.blg": true,
"**/*.idx": true,
"**/*.ind": true,
"**/*.lof": true,
"**/*.lot": true,
"**/*.lol": true,
"**/*.out": true,
"**/*.acn": true,
"**/*.acr": true,
"**/*.alg": true,
"**/*.glg": true,
"**/*.glo": true,
"**/*.gls*": true,
"**/*.ist": true,
"**/*.log": true,
"**/*.fdb_latexmk": true,
"**/*.synctex*": true,
"**/*.run.xml": true,
"**/*.toc": true,
"**/*.vrb": true
},
"latex-workshop.intellisense.citation.backend": "biblatex",
"latex-workshop.latex.autoClean.run": "onFailed",
"latex-workshop.latex.clean.fileTypes": [
"%DOCFILE%.aux",
"%DOCFILE%.bbl",
"%DOCFILE%.blg",
"%DOCFILE%.idx",
"%DOCFILE%.ind",
"%DOCFILE%.lof",
"%DOCFILE%.lot",
"%DOCFILE%.out",
"%DOCFILE%.toc",
"%DOCFILE%.acn",
"%DOCFILE%.acr",
"%DOCFILE%.alg",
"%DOCFILE%.glg",
"%DOCFILE%.glo",
"%DOCFILE%.gls",
"%DOCFILE%.fls",
"%DOCFILE%.log",
"%DOCFILE%.fdb_latexmk",
"%DOCFILE%.snm",
"%DOCFILE%.synctex(busy)",
"%DOCFILE%.synctex.gz(busy)",
"%DOCFILE%.nav",
"%DOCFILE%.vrb",
"%DOCFILE%.glstex",
"%DOCFILE%.bcf",
"%DOCFILE%.run.xml"
],
}
As configurações acima fazem com que o Visual Studio Code:
- Use o
latexmk
para compilar os arquivos.tex
e gerar os PDFs. - Exclua automaticamente os arquivos temporários gerados pelo LaTeX, como
.aux
,.log
,.toc
, etc. - Exiba o PDF gerado no painel lateral do Visual Studio Code.
- Use o zoom de largura de página para a visualização do PDF.
- Habilite a sincronização entre o código fonte e o PDF gerado, permitindo que você clique no PDF e seja levado ao local correspondente no código fonte.
- Use o
biblatex
como backend para a formatação de citações e referências bibliográficas. - Use o diretório
outlatexdir
para armazenar os arquivos de saída gerados pelo LaTeX, mantendo a organização dos arquivos.
As teclas de atalho são uma forma prática de acelerar o processo de escrita e formatação do texto. No Visual Studio Code, você pode criar suas próprias teclas de atalho para comandos específicos. Abaixo estão algumas teclas de atalho que criei para facilitar a formatação de texto em LaTeX: negrito, itálico e typewriter.
[
{
"key": "crtl+b",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus && editorLangId == latex",
"args": {
"snippet": "\\textbf{${TM_SELECTED_TEXT}}$0"
}
},
{
"key": "crtl+i",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus && editorLangId == latex", // chained clause
"args": {
"snippet": "\\textit{${TM_SELECTED_TEXT}}$0"
}
},
{
"key": "crtl+t",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus && editorLangId == latex", // chained clause
"args": {
"snippet": "\\texttt{${TM_SELECTED_TEXT}}$0"
}
}
]
No Visual Studio Code, você pode criar snippets (atalhos) para facilitar a escrita de código. Esses snippets são atalhos que geram blocos de código pré-definidos quando você digita um prefixo e pressiona ENTER.
Abra o Visual Studio Code, vá em Preferences -> User snippets e edite o arquivo latex.json
. Coloque o seguinte conteúdo dentro:
{
"Beamer frame":{
"prefix": "frame",
"body": ["\\begin{frame}{$1}\n\\begin{itemize}\n\t\\item $0\n\\end{itemize}\n\\end{frame}"],
"description": "LaTeX Beamer frame env"
},
"LaTeX itemize env":{
"prefix": "itemize",
"body": ["\\begin{itemize}\n\t\\item $0\n\\end{itemize}"],
"description": "itemize env"
},
"Beamer block":{
"prefix": "block",
"body": ["\\begin{block}{$1}\n\t $0\n\\end{block}"],
"description": "LaTeX Beamer block"
},
"LaTeX column env":{
"prefix": "columns",
"body": ["\\begin{columns}\n\t\\column{.5\\linewidth}\n\t $0\n\t\\column{.5\\linewidth}\n\t \n\\end{columns} "],
"description": "columns env"
},
"LaTeX figure env":{
"prefix": "figure",
"body": ["\\begin{figure}[ht]\n\t\\centering\n\t\\caption{$2}\n\t\\label{fig:$0}\n\t\\includegraphics[width=\\linewidth]{$1}\n\\end{figure}"],
"description": "LaTeX figure env"
},
"LaTeX includegraphics beamer":{
"prefix": "includegraphics",
"body": ["\\begin{center}\n\t\\includegraphics[width=\\linewidth]{figs/$0}\n\\end{center}"],
"description": "LaTeX includegraphics"
},
"LaTeX beamer only":{
"prefix": "only",
"body": ["\\only<${1|1,2,3,4,5,6|}>{\n\t$0\n}"],
"description": "LaTeX beamer only"
},
"Beamer only env":{
"prefix": "onlyenv",
"body": ["\\begin{onlyenv}<${1|1,2,3,4,5,6|}>\n\t $0\n\\end{onlyenv}"],
"description": "LaTeX Beamer Only env"
},
"Lstlisting":{
"prefix": "lstlisting",
"body": ["\\begin{lstlisting}[style=$1]\n$0\n\\end{lstlisting}"],
"description": "Lstlisting env"
},
"lstinput":{
"prefix" : "lstinput",
"body": "\\lstinputlisting[style=$1,caption=$2,label={$3}]{$0}",
"description": "Listing input"
}
}