Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • main
1 result

Target

Select target project
  • jakle/python-and-sympy
1 result
Select Git revision
  • main
1 result
Show changes

Commits on Source 2

%% Cell type:markdown id: tags:
<font size="5"><center>
Kursus: 01005 Matematik 1 \
Forfatter: Jakob Lemvig \
Email: jakle@dtu.dk
</font></center>
%% Cell type:code id: tags:
``` python
from sympy import *
init_session()
```
%% Output
IPython console for SymPy 1.11.1 (Python 3.10.6-64-bit) (ground types: python)
These commands were executed:
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function)
>>> init_printing()
Documentation can be found at https://docs.sympy.org/1.11.1/
%% Cell type:markdown id: tags:
# Hvordan arbejder man videre med output/løsninger i SymPy?
Man kommer tit ud for at skulle arbejde videre med output eller en løsning i SymPy. Fx hvis man bliver bedt om at angive en løsning ud af uendeligt mange løsninger. Lad os kigge på nogle typiske eksempler.
%% Cell type:markdown id: tags:
## Egenvektorer
Vi ønsker ofte at arbejde videre med egenvektorer af en matrix, men det kan hurtigt blive besværligt at skrive alle (lin. uafh.) egenvektorerne ind manuelt. Hvis man bruger `eigenvects`-metoden gemmer SymPy al information i en liste:
%% Cell type:code id:c43ae7ec tags:
``` python
A = Matrix([[6,2,4],[2,9,-2],[4,-2,6]])
ev = A.eigenvects()
display(ev, type(ev))
```
%% Output
$\displaystyle \left[ \left( 1, \ 1, \ \left[ \left[\begin{matrix}-1\\\frac{1}{2}\\1\end{matrix}\right]\right]\right), \ \left( 10, \ 2, \ \left[ \left[\begin{matrix}\frac{1}{2}\\1\\0\end{matrix}\right], \ \left[\begin{matrix}1\\0\\1\end{matrix}\right]\right]\right)\right]$
%% Cell type:markdown id: tags:
`eigenvects()` giver altså en liste af tuples, hvor egenvektorerne gemmes på plads 2 i hver tuple. Vi kan derfor gemme alle egenvektorerne i en liste af vektorer på følgende måde:
%% Cell type:code id: tags:
``` python
list_of_ev = []
[list_of_ev.extend(ev[k][2]) for k in range(0,len(ev))]
list_of_ev
```
%% Output
$\displaystyle \left[ \left[\begin{matrix}-1\\\frac{1}{2}\\1\end{matrix}\right], \ \left[\begin{matrix}\frac{1}{2}\\1\\0\end{matrix}\right], \ \left[\begin{matrix}1\\0\\1\end{matrix}\right]\right]$
⎡⎡-1 ⎤ ⎡1/2⎤ ⎡1⎤⎤
⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥
⎢⎢1/2⎥, ⎢ 1 ⎥, ⎢0⎥⎥
⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥
⎣⎣ 1 ⎦ ⎣ 0 ⎦ ⎣1⎦⎦
%% Cell type:markdown id: tags:
Eller som matrix:
%% Cell type:code id: tags:
``` python
Matrix(A.shape[0],len(list_of_ev),Matrix((list_of_ev))).T
```
%% Output
$\displaystyle \left[\begin{matrix}-1 & \frac{1}{2} & 1\\\frac{1}{2} & 1 & 0\\1 & 0 & 1\end{matrix}\right]$
⎡-1 1/2 1⎤
⎢ ⎥
⎢1/2 1 0⎥
⎢ ⎥
⎣ 1 0 1⎦
%% Cell type:markdown id: tags:
Hvis vi gerne vil arbejde videre med egenvektorerne som søjler i en matrix, er det meget nemmere at bruge `diagonalize` metoden:
%% Cell type:code id:789ade26 tags:
``` python
V, Lamda = A.diagonalize()
V, Lamda
```
%% Output
$\displaystyle \left( \left[\begin{matrix}-2 & 1 & 1\\1 & 2 & 0\\2 & 0 & 1\end{matrix}\right], \ \left[\begin{matrix}1 & 0 & 0\\0 & 10 & 0\\0 & 0 & 10\end{matrix}\right]\right)$
⎛⎡-2 1 1⎤ ⎡1 0 0 ⎤⎞
⎜⎢ ⎥ ⎢ ⎥⎟
⎜⎢1 2 0⎥, ⎢0 10 0 ⎥⎟
⎜⎢ ⎥ ⎢ ⎥⎟
⎝⎣2 0 1⎦ ⎣0 0 10⎦⎠
%% Cell type:markdown id:9f7a8935 tags:
## Et lineært ligningssystem med flere løsninger
Vi ønsker at løse det inhomogene ligningssystem:
%% Cell type:code id: tags:
``` python
x1,x2,x3 = symbols('x1:4')
eq1 = Eq(-x2 + x3, 2)
eq2 = Eq(2*x1 + 4*x2 - 2*x3, 2)
display(eq1, eq2)
```
%% Output
$\displaystyle - x_{2} + x_{3} = 2$
$\displaystyle 2 x_{1} + 4 x_{2} - 2 x_{3} = 2$
%% Cell type:markdown id: tags:
hvis totalmatrix er givet ved
%% Cell type:code id:57c54709 tags:
``` python
A, b = linear_eq_to_matrix([eq1, eq2], [x1, x2, x3])
T = A.row_join(b)
display(T)
```
%% Output
$\displaystyle \left[\begin{matrix}0 & -1 & 1 & 2\\2 & 4 & -2 & 2\end{matrix}\right]$
%% Cell type:markdown id:34345904 tags:
Det kan løses direkte ved brug af SymPy på flere forskellige måder:
%% Cell type:code id:6b058e32 tags:
``` python
sols1 = A.gauss_jordan_solve(b)
sols2 = linsolve(T)
sols3 = solve([eq1,eq2])
display(sols1,sols2,sols3)
```
%% Output
$\displaystyle \left( \left[\begin{matrix}5 - \tau_{0}\\\tau_{0} - 2\\\tau_{0}\end{matrix}\right], \ \left[\begin{matrix}\tau_{0}\end{matrix}\right]\right)$
$\displaystyle \left\{\left( 5 - \tau_{0}, \ \tau_{0} - 2, \ \tau_{0}\right)\right\}$
$\displaystyle \left\{ x_{1} : 5 - x_{3}, \ x_{2} : x_{3} - 2\right\}$
%% Cell type:markdown id: tags:
**Vi forestiller os at vi gerne vil angive den løsning, hvor den frie parameter er lig med $4$.** Vi bemærker først at løsningerne gemmes i forskellige data-typer, så det er svært at lave en generel metode:
%% Cell type:code id: tags:
``` python
type(sols1), type(sols2), type(sols3)
```
%% Output
(tuple, sympy.sets.sets.FiniteSet, dict)
%% Cell type:code id: tags:
``` python
sols2.kind
```
%% Output
SetKind(TupleKind(NumberKind, NumberKind, NumberKind))
%% Cell type:markdown id: tags:
Vi prøver:
%% Cell type:code id: tags:
``` python
display(sols1[0])
# sols1[0].subs(tau0,4) # Fejlmeddelelse: NameError: name 'tau0' is not defined
```
%% Output
$\displaystyle \left[\begin{matrix}5 - \tau_{0}\\\tau_{0} - 2\\\tau_{0}\end{matrix}\right]$
%% Cell type:markdown id: tags:
men 'tau0' er ikke defineret. Vi kan undersøge sagen nærmere med:
%% Cell type:code id: tags:
``` python
srepr(sols1[0])
```
%% Output
"MutableDenseMatrix([[Add(Integer(5), Mul(Integer(-1), Symbol('tau0')))], [Add(Symbol('tau0'), Integer(-2))], [Symbol('tau0')]])"
%% Cell type:markdown id: tags:
Vi ser at 'tau0' faktisk hedder `Symbol('tau0')`, så en mulighed er:
%% Cell type:code id: tags:
``` python
sols1[0].subs(Symbol('tau0'),4)
```
%% Output
$\displaystyle \left[\begin{matrix}1\\2\\4\end{matrix}\right]$
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣4⎦
%% Cell type:markdown id:2c05071d tags:
### Brug af `free_symbol`-metoden:
Vi kan mere generelt få fat i de frie variable ved `free_symbols`-metoden:
%% Cell type:code id: tags:
``` python
# sols1
sols1_as_tuple = Tuple(*sols1)
var1_as_tuple = Tuple(*sols1_as_tuple.free_symbols)
display(sols1_as_tuple, var1_as_tuple)
```
%% Output
$\displaystyle \left( \left[\begin{matrix}5 - \tau_{0}\\\tau_{0} - 2\\\tau_{0}\end{matrix}\right], \ \left[\begin{matrix}\tau_{0}\end{matrix}\right]\right)$
$\displaystyle \left( \tau_{0},\right)$
%% Cell type:code id: tags:
``` python
# sols2
sols2_as_tuple = Tuple(*sols2)
var2_as_tuple = Tuple(*sols2_as_tuple.free_symbols)
display(sols2_as_tuple, var2_as_tuple)
```
%% Output
$\displaystyle \left( \left( 5 - \tau_{0}, \ \tau_{0} - 2, \ \tau_{0}\right),\right)$
$\displaystyle \left( \tau_{0},\right)$
%% Cell type:code id: tags:
``` python
# sols3 er en dictionary, så den skal tilgås ved:
display(tuple(sols3.keys()),tuple(sols3.values()))
```
%% Output
$\displaystyle \left( x_{1}, \ x_{2}\right)$
$\displaystyle \left( 5 - x_{3}, \ x_{3} - 2\right)$
%% Cell type:code id: tags:
``` python
# sols3
sols3_as_tuple = Tuple(*sols3.values()) # bemærk `values`-metoden bruges
var3_as_tuple = Tuple(*sols3_as_tuple.free_symbols)
display(sols3_as_tuple, var3_as_tuple)
```
%% Output
$\displaystyle \left( 5 - x_{3}, \ x_{3} - 2\right)$
$\displaystyle \left( x_{3},\right)$
%% Cell type:markdown id: tags:
**Lad os samle det i én kommando:**
%% Cell type:code id: tags:
``` python
# virker både for sols1 og sols2, mens sols3 kræver sols3.values()
sols = linsolve((A,b)) # or sols = A.gauss_jordan_solve(b)
var = Tuple(*Tuple(*sols).free_symbols)
display(Tuple(*sols)[0])
Tuple(*sols)[0].subs(var[0],4)
```
%% Output
$\displaystyle \left( 5 - \tau_{0}, \ \tau_{0} - 2, \ \tau_{0}\right)$
$\displaystyle \left( 1, \ 2, \ 4\right)$
(1, 2, 4)
%% Cell type:markdown id: tags:
Det er lige til at generalisere dette til tilfælde med flere frie variable. Prøv.
Figures/EditPath.PNG

496 KiB

Figures/ForskelKorrektForkertSti.PNG

4.57 KiB

Figures/IngenOutput.PNG

5.08 KiB

Figures/PandocNotFound.PNG

7.5 KiB

Figures/ProblemerMedBilleder.PNG

21.3 KiB

Figures/SpaceEquation.PNG

17.8 KiB

Figures/XelatexNotFound.PNG

8 KiB

Figures/XelatexWorking.PNG

9 KiB

Figures/exportFailed.PNG

2.53 KiB

Figures/nbconvert.PNG

12.8 KiB

%% Cell type:markdown id: tags:
Af Christian Mikkelstrup, Hans Henrik Hermansen og Jakob Lemvig
%% Cell type:markdown id: tags:
# Generelt om aflevering af eksamens- og hjemmeopgaver
Først et par kommentarer om afleveringer i 01005 Matematik 1:
> <font size="6">**Hvis alt går galt til eksamen, så aflever blot en tom PDF og `ipynb`-filen som bilag**
> Den "tomme" PDF bør henvise til bilaget og forklare at I ikke kunne eksportere til PDF.</font>
> <font size="6">Gør jeres matematik **reproducerbar**. Det kan gøres ved at vedhæfte jeres Notebook i `ipynb`-format som bilag til jeres hjemmeafleveringer. Hvis I skriver selve afleveringen direkte som en Notebook, er dette trin selvfølgelig ikke nødvendigt.
</font>
%% Cell type:markdown id: tags:
# Konvertering af Notebooks
I denne notebook bliver der først gennemgået installationen, hvorefter 3 metoder til eksportering præsenteres, hvormed man kan exportere sin fine Jupyter Notebook til et pdf dokument. Der vil være en *simpel metode*, som vil være fremgangsmåden for klart de fleste af jer, en *advanceret metode*, hvis I vil have endnu mere kontrol over hvordan jeres pdf ser ud, eller en metode der altid virker (men dog ikke er lige så pæn). Dette er vigtigt til aflevering af hjemmeopgaverr, da disse skal afleveres som pdf (.ipynb filer godtages ikke). I kan passende exportere dette dokument (eller enhver af demoerne) for at teste at jeres exportering virker!
%% Cell type:markdown id: tags:
# Installering
Før vi kan begynde at eksportere dokumenter, er det krævet at installere 2-3 ting. Først skal vi bruge **pandoc**, som er et værktøj til at konverterer mellem forskellige dokument-formater. Det kan hentes på link: [https://pandoc.org/installing.html](https://pandoc.org/installing.html). Derudover skal vi bruge **LaTeX**. Download er specifik til styresystemet, så Windows systemer skal bruge [MikTex](https://miktex.org), Mac systemer skal bruge [MacTex](https://tug.org/mactex/) og Linux systemer skal bruge [Tex Live](https://tug.org/texlive/). Endelig vil det være nyttigt at installere [nbconvert](https://nbconvert.readthedocs.io/en/latest/), da det giver mulighed for konvertering af Notebooks via terminalen.
## Noter for nbconvert installation
- **Installation**: Åben først en terminal (fra toolbar: Terminal > New Terminal (eller ctrl+shift+\`). Kør: `pip install nbconvert` eller `conda install nbconvert`, se denne [guide](https://nbconvert.readthedocs.io/en/latest/install.html)
- The command-line **syntax** to run the nbconvert script is:
```
jupyter nbconvert --to FORMAT notebook.ipynb
```
This will convert the Jupyter notebook file notebook.ipynb into the output format given by the FORMAT string.
## Noter for LaTeX installation
### Linux
Guiden under [Tex Live](https://tug.org/texlive/) er ret god (tl;dr: Unix(ish)), men vi skulle notere/justere 3 ting:
- Step 4: i stedet for stjerne, skulle vi skrive hvad cifre der var kommer til mappen. Man kan finde ud af hvilke mapper og filer der ligger hvor man er nu ved at skrive ``ls`` i kommandovinduet.
- Step 5: Her skulle vi skrive ``sudo`` og mellemrum før resten af linjen for at den kunne køre. Dette krævede også at man indtaster koden til computeren.
- Step 6: De beder dig her om at tilføje den til din PATH. Måden det har virket for os er ved at åbne ".bashrc" i "/home/" (gemt fil) og tilføje linjen nederst: ``PATH="/usr/local/texlive/2022/bin/x86_64-linux:$PATH"``
### Ekstra for Mac og Windows
Sørg for at notere stien hvori programmet downloades. Når programmet er installeret, så sørg for at åbne programmet og downloade eventuelle optateringer, hvis du bliver bedt om det (Eksempelvis i MiKTeX, hvor en knap siger "Check for updates", og så kan man trykke på "Update now" under "Updates" fanen). For Windows og Mac skal stien til det downloadede program tilføjes til "PATH" (gør så python kan bruge LaTeX kommandoerne):
- For Windows kan man søge efter "Rediger systemmiljøvariablerne" ("Edit the system environment variables" på engelsk) og vælge "Miljøvariabler" ("Environment Variables"). Derefter kan man under "Brugervariabler" dobbeltklikke på "Path" ("User variables" og "PATH"). Inde på denne meny skal man trykke "Ny" ("New") og indsætte stien til hvor man har downloaded filen i formatet (med "DOWNLOADPATH" erstattet med jeres sti): ``DOWNLOADPATH\MiKTeX\miktex\bin\x64\`` Nu kan du trykke på "OK" på alle de åbnede vinduer for at lukke dem igen.
- For Mac kan man tilføje programmet til "PATH" ved brug af én kommando fra kommandolinjen: ``export PATH=/Library/TeX/texbin:$PATH``
Når installationen er færdig er det krævet, at du genstarter Visual Studio Code før du kan eksportere til PDF.
%% Cell type:markdown id: tags:
# Eksportering
## Kort om de forskellige løsninger
### Brug af GUI i VS Code
1. PDF via $\LaTeX$: Ctrl-Shift-P (Linux/Windows) eller Cmd-Shift-P (Mac) og skriv "**Export to PDF**". Alternativt: Tryk på $\cdots$ i toolbaren lige over notebooken og vælg "eksport -> PDF".
1. PDF via HTML: Ctrl-Shift-P (Linux/Windows) eller Cmd-Shift-P (Mac) og skriv "**Export to HTML**". Alternativt: Tryk på $\cdots$ i toolbaren lige over notebooken og vælg "eksport -> HTML". Åben derefter HTML-filen i en browser og vælg "Print -> Print to PDF".
### Brug af nbconvert fra terminalen (uafhængigt af VS Code)
Ved længere rapporter er det nyttigt at eksportere jeres Notebook til en LaTeX-fil (se 1. nedenfor). Ved kortere afleveringer bør I eksportere til PDF (se 2. og 3. nedenfor). Vi skal først åbne en terminal eller command prompt. I VS Code kan i vælge Terminal > New Terminal. I terminalen skal vi derefter navigere til den folder/mappe/bibliotek hvor Notebooken ligger, fx `cd Mat1-opgaver`. Derefter kalder vi `jupyter nbconvert` fra terminalen på følgende måder:
1. Direkte til $\LaTeX$: `jupyter nbconvert --to latex notebook.ipynb`. Herefter til PDF via: `xelatex notebook.tex`
1. Direkte til PDF via LaTeX: `jupyter nbconvert --to pdf notebook.ipynb`
1. Til PDF via HTML `jupyter nbconvert --to html notebook.ipynb`. Åben derefter HTML-filen i en browser og vælg "Print -> Print to PDF".
%% Cell type:markdown id: tags:
## Mere information om eksport til PDF via LaTeX (fra GUI i VS Code)
Du skal åbne filen du gerne vil have eksporteret til pdf. Inde på filen kan du søge efter kommandoen (Man finder søge-baren ved Ctrl-Shift-P eller Cmd-Shift-P på Mac) "**Export to PDF**". Du får her mulighed for at vælge hvor din pdf skal gemmes. Det kan godt tage noget tid før den bliver færdig med at eksportere.
Noter ved eksport ved denne metode:
- Det kan give mening at have det første i dokumentet være forfatteren (lavet af), da dette er det første der kommer ind under den automatisk genererede overskrift.
- Overskriften i pdf-dokumentet bliver navnet på notebook filen.
- Der bliver automatisk lavet afsnit eller underafsnit når man i markdown har indsat "#" eller "##" (eller "###").
- Specielle symboler kan nogle gange forsvinde. Eksempelvis kommer de fancy *Shift* og *Cmd* for Mac ikke med hvis man eksporterer "Intro-SymPy.ipynb". Overvej om man kan skrive deres navn i stedet for.
%% Cell type:markdown id: tags:
## Mere information om advanceret eksport til PDF
Hvis man gerne vil have mere kontrol over layoutet i den resulterende pdf, skal man åbne en terminal i mappen hvor jupyter notebook'en ligger. Dette kan gøres i Visual Studio Code under "Terminal -> New Terminal", og (hvis ikke kommandoen ``pwd`` viser den rigtige sti) skrive ``cd "den_fulde_sti_indsættes_her"``. Herefter skrives følgende kommando (med "notebook" erstattet med notebook'ens navn)
`jupyter nbconvert notebook.ipynb --to latex`
Dette laver en række nye filer i samme mappe som notebook'en, hvoraf én af dem gerne skal være en ".tex" fil med samme navn som notebook'en. Denne LaTeX fil skal så åbnes i det downloadede LaTeX system (MikTex, MacTex eller Tex Live). Man kan også arbejde videre med denne fil på [Overleaf](https://www.overleaf.com/), men da denne mulighed bruger internet, kan dette ikke bruges til eksamen.
Nu kan man så justere ved den rå LaTeX kildekode før man kompilerer dokumentet! Her er et par detaljer som vi har brugt eller noteret ved denne metode:
- Standard formatet ved brug af denne metode, hvis der ikke gøres mere, er præcis det samme som den simple eksportering.
- Man kan ændre overskriften i PDF'en ved at finde og justere den linje i dokumentet hvor der står ``\title{notebook_title_here}``.
- Hvis man gerne vil indsætte forfattere i den auto-genererede overskrift, kan man i linjen under titlen indsætte følgende linje: ``\author{my_name_here}``
- Man kan fjerne tallene før overskrifterne ved at finde de steder hvor der står ``\section{header}`` (eller ``\subsection{header}`` og ``\subsubsection{header}``) og erstatte med ``\section*{header}`` (eller ``\subsection*{header}`` og ``\subsubsection*{header}``).
- Det er ikke altid at den kompilerer. Eksempelvis kan "Intro-SymPy.ipynb" dokumentet ikke kompileres uden justeringer, da det indeholder fancy versioner af *shift* og *command* for mac. Man kan eksempelvis komme rundt om dette problem ved at skrive ``Cmd`` og ``Shift`` i stedet for. I den simple version fjernede den helt bare symbolerne i stedet for at smide en fejl. Dette er bare en advarsel om, at du bliver bedt om at gøre noget, hvis den støder på problemer.
- I linux kan man kompilere sit dokument ved at navigere til et kommandovindue hen til den korrekte sti, hvorefter man kører kommandoen ``xelatex filename.tex``
%% Cell type:markdown id: tags:
## Hvis alt andet fejler
Eksportering fra notebook til latex er stadig ret nyt, så man kan ende i en situation hvor ens flotte notebook bare ikke vil eksportere, også selvom det ser godt ud i Visual Studio Code. Hvis det ikke virker når man sidder til eksamen, eller man ikke orker bruge mere tid på det, skal du følge disse instruktioner!
Inde på filen kan du søge efter kommandoen "**Export to HTML**". Du får her mulighed for at vælge hvor filen skal gemmes. Hvis dette ikke virker, så prøv `jupyter nbconvert --to html notebook.ipynb` i terminalen. Herefter skal du åbne den nye ".html" fil i en browser (den bruger ikke internet på trods af at det er en browser). Du kan nu vælge at "printe" siden, og som printer vælge "Gem som PDF" ("Save as PDF").
%% Cell type:markdown id: tags:
Af Christian Mikkelstrup, s194345
Hvis du stadig har problemer efter at have fulgt *Konverting af Notebook til PDF* (ligger på DTU Learn), har jeg fundet følgende ting, som I kan prøve/checke virker!
# Genstart VS Code
Ja, den kedelige genstart... Jeg ved det godt, men det virker altså flere gange end man faktisk skulle tro! Det er dog vigtigt, at du helt lukker for alle instancer af programmet (på Mac betyder dette både det røde kryds, men også at finde den i linjen i bunden og sige "quit"). Når du starter den op igen, er der lidt større chance for, at det virker nu!
Hvis ikke dette virker, så prøv heldet med følgende punkter, og slut af med en genstart igen!
# Check at alt er installeret korrekt!
## Pandoc
Du kan tjekke om du har installeret Pandoc korrekt ved at åbne en terminal og køre kommandoen "pandoc". Hvis beskeden du får ud er *alt andet end* "det ved jeg ikke betyder", som i billedet nedenfor, så burde det være installeret korrekt! Et eksempel på hvad der så kan stå, hvis det virker, er nedenfor
![PandocNotFound](Figures/PandocNotFound.PNG)
Overstående viser hvad der står, *hvis pandoc **ikke** virker*.
![PandocFound](Figures/IngenOutput.PNG)
Ovenstående viser hvad der står, *hvis pandoc faktisk virker*.
Hvis det ikke virker for dig, så tjek at du har installeret det korrekt her [https://pandoc.org/installing.html](Figures/https://pandoc.org/installing.html)
## MikTex/MacTex
På samme måde som Pandoc, kan vi undersøge om MikTex er blevet installeret korrekt, og om PATH er blevet indsat korrekt ved bare én kommando i en terminal. Der følger to billeder der beskriver hvordan det ser ud, både når det virker, og når det ikke gør!
![XelatexNotFound](Figures/XelatexNotFound.PNG)
Ovenstående viser hvad der står, *hvis MikTex/MacTex samt alle steps derindimellem **ikke** virker*.
![XelatexFound](Figures/XelatexWorking.PNG)
Ovenstående viser hvad der står, *hvis alt der har noget med MikTex/MacTex at gøre faktisk virker*.
Hvis det ikke virker, så sørg for at det er installeret (Windows: [MikTex](Figures/https://miktex.org), Mac (den lille pakke burde være nok, hvis du har meget lidt plads på computeren): [MacTex](Figures/https://tug.org/mactex/)). Hvis det stadig ikke virker og du er på Mac, sørg så for at køre følgende kommando i en terminal (der kommer ikke noget output, hvis jeg husker rigtigt) ``export PATH=/Library/TeX/texbin:$PATH``
Hvis MikTek ikke virker for dig på Windows, kan det være tilfældet, at du aldrig fik tilføjet den PATH der, eller fik det gjort helt korrekt. For dem, har jeg her vedhæftet et billede af hvordan jeg gjorde det. Det kan være, at du på det sidste vindue skal trykke på "ny" før du indsætter stien til hvor MikTex ligger. Dette er her hvor min ligger, skrevet ind i korrekt format. Det sted hvor den installeres som standard er muligvis på stien ``C:\Users\<dit_brugernavn>\AppData\Local\MiKTeX\miktex\bin\x64``.
![HvordanFinderManPath](Figures/EditPath.PNG)
## nbconvert
Du kan også undersøge, om python kan finde "nbconvert" ved at åbne en terminal, køre python (eller python3) for at starte python, og derefter forsøge at importere denne pakke. Et eksempel, som smider en fejl er følgende:
![HvordanFinderManPath](Figures/nbconvert.PNG)
Hvis dette er tilfældet, så prøv at køre følgende kommando (i en ny terminal, efter du har lukket denne):
``python -m pip install nbconvert``
Hvis den klager over, at den ikke kan finde "python", kan det være du skal køre med "python3" i stedet. På samme måde, hvis den siger, "No module named pip", så prøv at køre med "pip3" i stedet for. Nu kan du prøve at genstarte terminalen, og du skal helst nu ikke få den fejl. Prøv at genstarte VS Code (step 1), og prøv igen!
# Hvis direkte export til PDF virker for nogle filer, men ikke for alle
Det er desværre sådan, at der er ting der kan skrives, og ser godt ud i VS code, men som gør at man ikke kan exportere til pdf pænt. Jeg har listet dem, som jeg har fundet endnu nedenunder. Der kommer desværre ingen god fejl-besked ud, så dette er bare nogle jeg har fundet "blindt". Dette er vel vidende, at *der helt sikkert er flere fejl end disse*. I en eksamens-situation, ville jeg altid bare konvertere til HTML og så til PDF.
1) Brug af "\\bm{x}" for bold math giver en fejl. Brug i stedet "\\mathbf{x}"
2) Brug af "enkelt backslash" i markdown mode hvis du vil vise et "backslash". Hvis du gerne vil have et backslash printet til skærmen, brug i stedet dobbelt backslash.
3) Mellemrum inden i "equation" i markdown! Disse kan virkeligt gemme sig, og være enormt svære at finde! Et billede af hvordan det gøres korrekt sammenlignes herunder med hvordan det gøres forkert,
![HvordanFinderManPath](Figures/SpaceEquation.PNG)
Den kan især være svær at finde, da dette faktisk ikke er et krav i alle felter (bmatrix og matrix burde virke helt fint uden), men skrig og rædsel, hvis det er i en equation. Min anbefaling er at fjerne alle linje mellemrum i ligninger!
## Hvis den giver fejl når du har billeder i din notebook
Hvis den virker fint i din notebook, men stadig giver en fejl når du forsøger at eksportere den til pdf, kan du prøve følgende. Jeg er stadig ikke ekspert i billeder i notebooks, men dette kan muligvis virke.
### HTML til pdf
Prøv at gemme filen som HTML, derefter til pdf. Dette er absolut ikke den pæneste måde at gøre det på, men det burde have billederne med.
### Pæn pdf
Prøv først: `jupyter nbconvert "filename.ipynb" --to pdf`
Hvis dette ikke virker, så prøv manuelt at gå via en tex-fil. Følgende 2 linjer kode i terminalen er den "advancerede metode" som tilfældigvis virker bedre med hensyn til billeder. Prøv at se, om ikke dette virker (med filename erstattet med filens navn. Hvis der er mellemrum i filnavnet, er dobbeltquotes rundt om filnavnet et krav):
`jupyter nbconvert "filename.ipynb" --to latex`
`xelatex "filename.tex"`
# Hvis ikke konvertering til pdf gennem html virker!
Hvis du har en notebook der ikke kan konvertere til pdf først gennem html, så kom lige og tal med en hjælpelærer. Worst case, til en eksamen, så bare aflever en notebook fil (.ipynb extention), men vi vil virkeligt gerne have, at dette *altid* virker!