---
# System prepended metadata

title: 如何在Google Colab上執行帶有Tikz的LaTex文件
tags: [LaTex, Colab]

---

# 如何在Google Colab上執行帶有Tikz的LaTex文件

&nbsp;

為了要在Google Colab上顯示帶有Tikz的LaTeX Document，首先必須安裝[jupyter-tikz][1]這個套件，按照網頁的說明，依序安裝==Tex Live==及==Poppler==這2個套件即可

**Tex Live**

    !sudo apt-get install texlive-latex-base
    !sudo apt-get install texlive-latex-extra
    !sudo apt-get install texlive-latex-recommended
    !sudo apt-get install texlive-fonts-recommended

之後輸入以下指令來確認Tex Live是否安裝成功

    pdflatex --version

___

**Poppler**


    !sudo apt-get install poppler-utils


安裝Poppler主要是為了裡頭的pdftocairo，可輸入以下指令確認是否安裝成功

    pdftocairo -v
___

隨後只要安裝jupyter-tikz，並利用cell magic語法即可載入

    !pip install jupyter-tikz
    %load_ext jupyter_tikz
    
我們可以嘗試一個簡單的例子，來試試看它的效果


    %%tikz
    \begin{tikzpicture}
        \draw[help lines] grid (5, 5);
        \draw[fill=black!10] (1, 1) rectangle (2, 2);
        \draw[fill=black!10] (2, 1) rectangle (3, 2);
        \draw[fill=black!10] (3, 1) rectangle (4, 2);
        \draw[fill=black!10] (3, 2) rectangle (4, 3);
        \draw[fill=black!10] (2, 3) rectangle (3, 4);
    \end{tikzpicture}
    
它的輸出看起應該會是這樣子

![output](https://pypi-camo.freetls.fastly.net/d4fd328671b9df82d5304270ed8832d186ace152/68747470733a2f2f6a7570797465722d74696b7a2e72656164746865646f63732e696f2f737461626c652f6173736574732f636f6e7761792e737667)

我們還可以搭配其它的參數，來檢視它的輸出，比如使用 **-pt**，來印出整個LaTeX文件

    %%tikz -pt
    \begin{tikzpicture}
        \draw[help lines] grid (5, 5);
        \draw[fill=black!10] (1, 1) rectangle (2, 2);
        \draw[fill=black!10] (2, 1) rectangle (3, 2);
        \draw[fill=black!10] (3, 1) rectangle (4, 2);
        \draw[fill=black!10] (3, 2) rectangle (4, 3);
        \draw[fill=black!10] (2, 3) rectangle (3, 4);
    \end{tikzpicture}


```
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}
        \draw[help lines] grid (5, 5);
        \draw[fill=black!10] (1, 1) rectangle (2, 2);
        \draw[fill=black!10] (2, 1) rectangle (3, 2);
        \draw[fill=black!10] (3, 1) rectangle (4, 2);
        \draw[fill=black!10] (3, 2) rectangle (4, 3);
        \draw[fill=black!10] (2, 3) rectangle (3, 4);
    \end{tikzpicture}
\end{document}
```

從印出的結果來看，我們可以看到跟原本的略有不同，前後多了幾行文字

> \documentclass{standalone}
> \usepackage{tikz}
> \begin{document}
> ...
> 
> \end{document}


正常的LaTex其實是會包含上述文字的，如果以下面這個範例，丟進jupyter-tikz，是會產生錯誤的

    %%tikz
    \documentclass{standalone}
    \usepackage{tikz}
    \usetikzlibrary{external}
    \tikzexternalize
    \begin{document}
        \begin{tikzpicture}[x={(0cm,-1cm)},y={(1cm,0cm)},box/.style={rectangle,draw=black,thick,minimum size=1cm,anchor=center}]

        \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,0) {\shortstack{T0 \\ V0}};
        \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,-2) {\shortstack{T0 \\ V0}};
        \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (-2,0) {\shortstack{T0 \\ V0}};
        \node at (0,-3) {\Large{\texttt{0}}};
        \node at (-1,-2) {\Large{\texttt{0}}};
        \node at (-3,0) {\Large{\texttt{0}}};
        \node at (-2,-1) {\Large{\texttt{0}}};
        \end{tikzpicture}
    \end{document}


它會顯示這樣的錯誤

```
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))

! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.4     \documentclass
                      {standalone}
? 
! Emergency stop.
 ...                                              
                                                  
l.4     \documentclass
                      {standalone}
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on 842590dc92bd45443e4af9ae63e4ad56.log.
```

它的錯誤資訊也很明白的告訴你，在前言(preamble)的部分有問題，因為LaTeX的前言，是定義在\begin{document}之前，有些文字定義只能出現在這之前，若違反這項規定，就會印出這些錯誤資訊。此時用前面提到的 **-pt**參數，就會清楚多了

    %%tikz -pt
    \documentclass{standalone}
    \usepackage{tikz}
    \usetikzlibrary{external}
    \tikzexternalize
    \begin{document}
    \begin{tikzpicture}[x={(0cm,-1cm)},y={(1cm,0cm)},box/.style={rectangle,draw=black,thick,minimum size=1cm,anchor=center}]

    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,0) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,-2) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (-2,0) {\shortstack{T0 \\ V0}};
    \node at (0,-3) {\Large{\texttt{0}}};
    \node at (-1,-2) {\Large{\texttt{0}}};
    \node at (-3,0) {\Large{\texttt{0}}};
    \node at (-2,-1) {\Large{\texttt{0}}};
    \end{tikzpicture}
    \end{document}

最後印出的資訊

```
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
    \documentclass{standalone}
    \usepackage{tikz}
    \usetikzlibrary{external}
    \tikzexternalize
    \begin{document}
    \begin{tikzpicture}[x={(0cm,-1cm)},y={(1cm,0cm)},box/.style={rectangle,draw=black,thick,minimum size=1cm,anchor=center}]

    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,0) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,-2) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (-2,0) {\shortstack{T0 \\ V0}};
    \node at (0,-3) {\Large{\texttt{0}}};
    \node at (-1,-2) {\Large{\texttt{0}}};
    \node at (-3,0) {\Large{\texttt{0}}};
    \node at (-2,-1) {\Large{\texttt{0}}};
    \end{tikzpicture}
    \end{document}
\end{document}
```

從上面印出的結果來看，可以看到有2行\begin{document}，從第一行\begin{document}之後就不算是前言了，夾在2個\begin{document}之間的文字是有問題的，所以把多出來的部分移去即可

    %%tikz
    \begin{tikzpicture}[x={(0cm,-1cm)},y={(1cm,0cm)},box/.style={rectangle,draw=black,thick,minimum size=1cm,anchor=center}]

    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,0) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (0,-2) {\shortstack{T0 \\ V0}};
    \node[box,fill={rgb,255:red,175;green,175;blue,255}] at (-2,0) {\shortstack{T0 \\ V0}};
    \node at (0,-3) {\Large{\texttt{0}}};
    \node at (-1,-2) {\Large{\texttt{0}}};
    \node at (-3,0) {\Large{\texttt{0}}};
    \node at (-2,-1) {\Large{\texttt{0}}};
    \end{tikzpicture}

![image](https://hackmd.io/_uploads/r1Kt9FvCR.png)



參考資料：
1. [jupyter-tikz][1]
2. [Learn LaTeX in 30 minutes](https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes)
3. [[QST] What are other arguments in TiledMMA and TiledCopy, other than their thread layouts? #1142](https://github.com/NVIDIA/cutlass/discussions/1142)

[1]: https://pypi.org/project/jupyter-tikz/