Latex: Difference between revisions

From David's Wiki
 
(25 intermediate revisions by the same user not shown)
Line 10: Line 10:
Download [https://miktex.org MikTex].
Download [https://miktex.org MikTex].
It includes the TeXworks editor and will download packages as you use them.
It includes the TeXworks editor and will download packages as you use them.
This will not take up as much disk space as a full install.
This will not take up as much disk space as a full install but will require internet access to download new packages.
===Full Install===
===Full Install===
====Windows====
====Windows====
Download [https://www.tug.org/texlive/ TexLive].
Download [https://www.tug.org/texlive/ TexLive] using the [https://www.tug.org/texlive/acquire-iso.html ISO images].
This is several gigabytes since it includes all the popular LaTex packages and takes a while to install.
This is ~4 gigabytes since it includes all the popular LaTeX packages and takes a while to install.
You'll also need an editor. I recommend installing [[Atom_(text_editor) | Atom]] with the following packages:  
You'll also need an editor. I recommend installing [[Atom_(text_editor) | Atom]] with the following packages:  
* <code>latex</code> for calling the TexLive compiler
* <code>latex</code> for calling the TexLive compiler
* <code>language-latex</code> for syntax highlighting
* <code>language-latex</code> for syntax highlighting
* <code>pdf-view</code> for viewing the compiled pdf.
* <code>pdf-view</code> for viewing the compiled pdf.
<pre>
apm install latex language-latex pdf-view
</pre>


====Linux====
====Linux====
Line 28: Line 31:
pdflatex [mydocument.tex]
pdflatex [mydocument.tex]
</syntaxhighlight>
</syntaxhighlight>
* Note to add bibliography, you need to run <code>pdflatex</code>, <code>bibtex</code>, <code>pdflatex</code> or <code>rubber --pdf</code>.
==Usage==
==Usage==


Line 77: Line 83:
\end{minipage}
\end{minipage}
</pre>
</pre>


===Sections===
===Sections===
Line 96: Line 101:
===Custom Commands===
===Custom Commands===
You can define your own commands using <code>\newcommand</code>
You can define your own commands using <code>\newcommand</code>
<syntaxhighlight lang="latex">
\newcommand{\notdone}{{\color{red} Not done!!}}
</syntaxhighlight>


===Custom Operators===
===Custom Operators===
Line 126: Line 134:
===Font===
===Font===
;Font size
;Font size
<pre>
<syntaxhighlight lang="latex">
\documentclass[12pt]{article}
\documentclass[12pt]{article}
</pre>
</syntaxhighlight>


;Font type
;Font type
Line 135: Line 143:
==Tables==
==Tables==
===Multirow and Multicolumns===
===Multirow and Multicolumns===
<syntaxhighlight lang="latex">
\usepackage{multirow}
\multirow{3}{4em}{Dataset A}
</syntaxhighlight>
===Newlines===
===Newlines===
[https://tex.stackexchange.com/questions/2441/how-to-add-a-forced-line-break-inside-a-table-cell stackexchange line break in table cell]   
[https://tex.stackexchange.com/questions/2441/how-to-add-a-forced-line-break-inside-a-table-cell stackexchange line break in table cell]   
Line 145: Line 159:
For multirow cells, you can use <code>\multirowcell{5}{Numbers\\from\\ 1 to 5}</code>.   
For multirow cells, you can use <code>\multirowcell{5}{Numbers\\from\\ 1 to 5}</code>.   
By default, this will align center. You can make it align left: <code>\multirowcell{2}[0pt][l]{Number\\ Letter}</code>.
By default, this will align center. You can make it align left: <code>\multirowcell{2}[0pt][l]{Number\\ Letter}</code>.
==Table Generator==
[https://www.tablesgenerator.com/ https://www.tablesgenerator.com/] can generate table code from existing tables.
==Figures==
<syntaxhighlight lang="latex">
\begin{figure}[!htbp]
  \includegraphics[width=\linewidth]{/path/to/figure}
  \caption{}
  \label{}
\end{figure}
</syntaxhighlight>
Be sure to use vector figures (pdf or pgf) instead of raster ones (png, jpeg).<br>
See [https://timodenk.com/blog/exporting-matplotlib-plots-to-latex/ https://timodenk.com/blog/exporting-matplotlib-plots-to-latex/] on how to export matplotlib to pgf.
In the snippet <code>[!htbp]</code> represents the placement preferences.
* <code>!</code> means to ignore some placement limitations
* <code>h</code> mean to place the figure here
* <code>t</code> means top of the page.
* <code>b</code> means bottom of the page.
* <code>p</code> means to place it on a figure only page.
If you add the [https://ctan.mirrors.hoobly.com/macros/latex/contrib/float/float.pdf the float package], you can also use <code>[!H]</code> which is a more strict version of <code>[!h]</code>.
===Subfigure===
See [https://www.overleaf.com/learn/latex/How_to_Write_a_Thesis_in_LaTeX_(Part_3):_Figures,_Subfigures_and_Tables#Subfigures overleaf reference]
<syntaxhighlight lang="latex">
% In the header:
\usepackage{caption}
\usepackage{subcaption}
\begin{figure}[!htbp]
  \centering
  \begin{subfigure}[b]{0.45\linewidth}
    \centering
    \includegraphics[width=\linewidth]{graph1}
    \caption{This is graph1.}
    \label{fig:a}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\linewidth}
    \centering
    \includegraphics[width=\linewidth]{graph2}
    \caption{This is graph2.}
    \label{fig:b}
  \end{subfigure}
  \caption{}
  \label{fig:ab}
\end{figure}
</syntaxhighlight>


==Enumerate==
==Enumerate==
Line 178: Line 244:
<syntaxhighlight lang="latex">
<syntaxhighlight lang="latex">
\newcommand{\degree}{\ensuremath{^{\circ}} }
\newcommand{\degree}{\ensuremath{^{\circ}} }
\newcommand{\etal}{{\em et al. }}
\newcommand{\etal}{{\em et al.}}
\newcommand{\ceil}[1]{{\lceil #1 \rceil}}
\newcommand{\ceil}[1]{{\lceil #1 \rceil}}
\newcommand{\floor}[1]{{\lfloor #1 \rfloor}}
\newcommand{\floor}[1]{{\lfloor #1 \rfloor}}
\newcommand{\bmat}[1]{\begin{bmatrix}#1\end{bmatrix}}
\newcommand{\pmat}[1]{\begin{pmatrix}#1\end{pmatrix}}
</syntaxhighlight>
</syntaxhighlight>


Line 258: Line 327:
\usepackage[linesnumbered,ruled]{algorithm2e}
\usepackage[linesnumbered,ruled]{algorithm2e}


\begin{algorithm}[H]
\begin{algorithm}[!htbp]
  \KwData{this text}
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  \KwResult{how to write algorithm with \LaTeX2e }
Line 274: Line 343:
\end{algorithm}
\end{algorithm}
</syntaxhighlight>
</syntaxhighlight>
==Verbatim==
The <code>verbatim</code> package gives you the environment <code>verbatim</code>.
You can use <code>\verbatiminput</code> to embed text files.
===<code>fancyvrb</code>===
The <code>fancyvrb</code> package gives you the environment <code>Verbatim</code> which has more options. 
To embed in a figure, you can use <code>BVerbatim</code>. 
There is also <code>\VerbatimInput</code>, <code>\BVerbatimInput</code>, <code>\LVerbatimInput</code>.


==Document Class==
==Document Class==
Line 331: Line 409:
</pre>
</pre>
* <code>-r</code> specifies the DPI. Default is 150.
* <code>-r</code> specifies the DPI. Default is 150.
===Latex Cleanup===
If you need to submit the latex, e.g. to Arxiv, you can use this tool to help clean it up:
https://github.com/google-research/arxiv-latex-cleaner


==Resources==
==Resources==
* [http://detexify.kirelabs.org/classify.html Detexify LaTeX handwritten symbol recognition]
* [http://detexify.kirelabs.org/classify.html Detexify LaTeX handwritten symbol recognition]
[[Category:Programming languages]]

Latest revision as of 19:16, 20 September 2023

Typeset all of your papers using latex.


Installation

No Install

Use Overleaf to create latex documents in a web browser.

Partial Install

Download MikTex. It includes the TeXworks editor and will download packages as you use them. This will not take up as much disk space as a full install but will require internet access to download new packages.

Full Install

Windows

Download TexLive using the ISO images.
This is ~4 gigabytes since it includes all the popular LaTeX packages and takes a while to install. You'll also need an editor. I recommend installing Atom with the following packages:

  • latex for calling the TexLive compiler
  • language-latex for syntax highlighting
  • pdf-view for viewing the compiled pdf.
apm install latex language-latex pdf-view

Linux

sudo apt install texlive-full

Compile tex documents with

pdflatex [mydocument.tex]
  • Note to add bibliography, you need to run pdflatex, bibtex, pdflatex or rubber --pdf.

Usage

Fancy Math Font

See this answer.


% Use mathbb for the set of reals R or the set of complex numbers C
% Requires amsfonts
\mathbb{R}

Spaces

See Reference

Spaces in mathematical mode.
 
\begin{align*}
f(x) =& x^2\! +3x\! +2 \\
f(x) =& x^2+3x+2 \\
f(x) =& x^2\, +3x\, +2 \\
f(x) =& x^2\: +3x\: +2 \\
f(x) =& x^2\; +3x\; +2 \\
f(x) =& x^2\ +3x\ +2 \\
f(x) =& x^2\quad +3x\quad +2 \\
f(x) =& x^2\qquad +3x\qquad +2
\end{align*}

Units

For spacing between elements, use \hspace or \vspace.

\hspace[4mm]

Units in Latex
You can specify spacing in pt, mm, cm, ex, em, bp, dd, pc, in

Indents

Section

\hspace*{5mm}\begin{minipage}{\dimexpr\textwidth-5mm}
   Indented Section
\end{minipage}

Sections

Numbering

To change the section numbering from numbers to letters, add the following:

% Changes sections to use capital letters
\renewcommand{\thesection}{\Alph{section}}

% Changes subsections to use lowercase letters
\renewcommand{\thesubsection}{\thesection.\alph{subsection}}

Programming

Latex is a turing complete language.
You can use if statements and for loops in latex.

Custom Commands

You can define your own commands using \newcommand

\newcommand{\notdone}{{\color{red} Not done!!}}

Custom Operators

Latex packages like amsmath come with operators such as \sin and \log.
To get normal text for custom functions like arcsin, use \operatorname{arcsin}.
Below are some potentially useful math operators.

\DeclareMathOperator{\Tr}{Tr}
\DeclareMathOperator{\VCdim}{VCdim}
\DeclareMathOperator{\sign}{sign}
\DeclareMathOperator{\rank}{rank}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
Notes
  • Adding * puts subscript elements beneath the operator.

Programming

For Each Loops

\foreach [count=\i] \j in {A,B,...,H}{
Element \i~is \j\\
}

Page Layout

There are many packages which adjust the page layout.
You can use the package wordlike for a MS Word layout.

Font

Font size
\documentclass[12pt]{article}
Font type
  • Times New Roman - \usepackage{mathptmx}

Tables

Multirow and Multicolumns

\usepackage{multirow}

\multirow{3}{4em}{Dataset A}

Newlines

stackexchange line break in table cell
linebreak in multirow

To have a newline in a cell, you can use the makecell package.
\makecell{Some really \\ longer text}.
To make this align left: \makecell[l]{Some really \\ longer text}

For multirow cells, you can use \multirowcell{5}{Numbers\\from\\ 1 to 5}.
By default, this will align center. You can make it align left: \multirowcell{2}[0pt][l]{Number\\ Letter}.

Table Generator

https://www.tablesgenerator.com/ can generate table code from existing tables.

Figures

\begin{figure}[!htbp]
  \includegraphics[width=\linewidth]{/path/to/figure}
  \caption{}
  \label{}
\end{figure}

Be sure to use vector figures (pdf or pgf) instead of raster ones (png, jpeg).
See https://timodenk.com/blog/exporting-matplotlib-plots-to-latex/ on how to export matplotlib to pgf.

In the snippet [!htbp] represents the placement preferences.

  • ! means to ignore some placement limitations
  • h mean to place the figure here
  • t means top of the page.
  • b means bottom of the page.
  • p means to place it on a figure only page.

If you add the the float package, you can also use [!H] which is a more strict version of [!h].

Subfigure

See overleaf reference

% In the header:
\usepackage{caption}
\usepackage{subcaption}

\begin{figure}[!htbp]
  \centering
  \begin{subfigure}[b]{0.45\linewidth}
    \centering
    \includegraphics[width=\linewidth]{graph1}
    \caption{This is graph1.}
    \label{fig:a}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\linewidth}
    \centering
    \includegraphics[width=\linewidth]{graph2}
    \caption{This is graph2.}
    \label{fig:b}
  \end{subfigure}
  \caption{}
  \label{fig:ab}
\end{figure}

Enumerate

Enumerate is used to make lists

Change the label

Reference
Add the option for the labels:

  • label=(\alph*) for letters
  • label=(\Alph*) for upper-case letters
  • label=(\roman*) for roman numerals.
  • label=(\arabic*) for numbers
Example
\usepackage{enumitem}
#...
\begin{enumerate}[label=(\alph*)]
\item an apple
\item a banana
\item a carrot
\item a durian
\end{enumerate}

Other Options

  • font=\bfseries for bold labels
  • align=left left align labels

Useful Commands

A list of potentially useful commands.
You can paste the following an a Macros.tex file and \input{Macros} in your main tex file.

\newcommand{\degree}{\ensuremath{^{\circ}} }
\newcommand{\etal}{{\em et al.}}
\newcommand{\ceil}[1]{{\lceil #1 \rceil}}
\newcommand{\floor}[1]{{\lfloor #1 \rfloor}}

\newcommand{\bmat}[1]{\begin{bmatrix}#1\end{bmatrix}}
\newcommand{\pmat}[1]{\begin{pmatrix}#1\end{pmatrix}}

Bibliography (Bibtex)

How to do references in Latex.
Bibtex Examples

Citations

Use \cite or some variant to cite references.
Natbib reference sheet

# Defaults to author-year citations
\usepackage{natbib}
# For numerical citations
\usepackage[numbers]{natbib}

# If using author-year citations
\citet{jon90} ⇒ Jones et al. (1990)
\citep{jon90} ⇒ (Jones et al., 1990)
\citep[see][]{jon90} ⇒ (see Jones et al., 1990)

# If using numerical citations
\citet{jon90} ⇒ Jones et al. [21]
\citep{jon90} ⇒ [21]
\citep[see][]{jon90} ⇒ [see 21]

Case of Titles

If you do not want lower case titles, you can change your .bst file by commenting out the portion which alters the case.

FUNCTION {format.title}
{ 
  %title empty$
  %  { "" }
  %  { title "t" change.case$ }
  %if$
  title
  %add.link
}

Tikz

Tikz is used to draw graphs and other shapes

Drawing over images

\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) {
    \includegraphics[width=.9\linewidth]{my_image.png}
    };<br />
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
        \draw[black,ultra thick,rounded corners] (0.0,0.1) rectangle (0.3,0.5);
        \draw[red,ultra thick,rounded corners] (0.5,0.1) rectangle (0.8,0.5);
        % \draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
        % \foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {0.\x}; }
        % \foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {0.\y}; }
    \end{scope}
\end{tikzpicture}

Algorithms

How to insert pseudocode into your Latex document.

See algorithmc vs algorithmcx vs algorithm2e
Also Wikibooks: LaTeX/Algorithms for several examples

algorithmc

The algorithms bundle

algorithmcx

The algorithmicx package

algorithm2e

See https://en.wikibooks.org/wiki/LaTeX/Algorithms#Typesetting_using_the_algorithm2e_package

\usepackage[linesnumbered,ruled]{algorithm2e}

\begin{algorithm}[!htbp]
 \KwData{this text}
 \KwResult{how to write algorithm with \LaTeX2e }
 initialization\;
 \While{not at end of this document}{
  read current\;
  \eIf{understand}{
   go to next section\;
   current section becomes this one\;
   }{
   go back to the beginning of current section\;
  }
 }
 \caption{How to write algorithms}
\end{algorithm}

Verbatim

The verbatim package gives you the environment verbatim. You can use \verbatiminput to embed text files.

fancyvrb

The fancyvrb package gives you the environment Verbatim which has more options.
To embed in a figure, you can use BVerbatim.
There is also \VerbatimInput, \BVerbatimInput, \LVerbatimInput.

Document Class

Overleaf Writing your own class
Document classes are .cls files which provide a layout for your document. By writing your own document class, you can ensure a consistent layout across multiple latex documents. You can also encapsulate commands and macros or package requirements within your document class.

Notes

See Wikibooks: LaTeX/Document Structure for a list of common document classes and options.


Examples

Below is a basic example of a latex document

Article Example
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{datetime}
\usepackage{lipsum}<br />
\usepackage[numbers]{natbib}

\newdateformat{monthyear}{%
  \monthname[\THEMONTH] \THEYEAR}

\title{My Main Title\\
\large A Subtitle}
\author{My Name}
\date{\monthyear\today}

\begin{document}

\maketitle

\begin{abstract}
    \lipsum[1]
\end{abstract}

\section{Introduction}
\lipsum[2-4]


\bibliographystyle{plain}
\bibliography{thebib}

\end{document}

Exporting

See https://en.wikibooks.org/wiki/LaTeX/Export_To_Other_Formats#Convert_to_image_formats.

Images

On Linux, you can convert PDF files to PNG files using:

pdftoppm paper.pdf paper-page -r 300 -png
  • -r specifies the DPI. Default is 150.

Latex Cleanup

If you need to submit the latex, e.g. to Arxiv, you can use this tool to help clean it up: https://github.com/google-research/arxiv-latex-cleaner

Resources