Rasmus Handberg

Astronomer, Software Developer...

LaTeX

Lad det være sagt med det samme, LaTeX er super smart! - Især når man skriver rapporter, artikler o.lign. der indeholder store mængder matematik.
Det er ikke et tekstbehandlingsprogram som man kender det fra Microsoft® Word® el.lign. men mere et form for "programmerings-sprog", der skal compiles før man kan se resultatet. Men resultatet, er så til gengæld også et flot opsat dokument.

Herunder kan du finde links til de LaTeX-relaterede programmer jeg benytter, samt (med tiden) nogle af de tips og triks jeg har lært. Men bare for at gøre lidt reklame, kan det varmt anbefales at læse lidt i Lars Madsen fra IMF's bog om LaTeX. Link findes herunder.

Software

Litteratur

TeXnicCenter Output Profiles

I TeXnicCenter kan man definere en lang række output-profiler, der så kan bruges til at køre den ønskede samling compilere. Herunder kan du finde de output-profiler jeg benytter til TeXnicCenter - Måske kan du også bruge dem. De importeres let ved at vælge "Build -> Define Output Profiles -> Import".

Hvordan man sætter MiKTeX og TeXnicCenter rigtig op

Projects

Kommer snart...

Dansk orddeling (babel)

Som du måske ved, sørger pakken babel for korrekt orddeling i din tekst. Pakken er en standard-pakke der skal kaldes i preamplen på alle dine dokumenter. Pakken kaldes som bekendt på følgende måde, hvis man ønsker dansk orddeling:

\usepackage[danish]{babel}

Problemet der kan opstå i denne sammenhæng er at den danske orddeling som standard ikke er indlæst i MiKTeX. Dette betyder at når du compiler dit dokument vil du få en warning med teksten:

Package babel Warning: No hyphenation patterns were loaded for the language 'Danish'
I will use the patterns loaded for \language=0 instead.

For at indlæse den danske orddeling skal du åbne MiKTeX's "Settings"-menu. Her vælger du "Languages" og på listen vælger du den danske orddeling "dkhyph.tex", som vist herunder. Efter du har klikket på OK vil MiKTeX begynde at lave en række opsætninger, og det kan ske at du bliver spurgt om du vil installere LaTeX-filen "dkhyph.tex". Hvis dette er tilfældet vælger du bare det danske "package repository" og klikker på install. Herefter skulle dansk orddeling virke korrekt.

MiKTeX Settings - Danisk Babel

Dansk stavekontrol

Det er muligt at installere nye sprog til stavekontrollen i TeXnicCenter. Stavekontrollen bygger på den samme "motor" som open-source kontorpakken OpenOffice.org og derfor skal man, for at få dansk stavekontrol i TeXnicCenter, gå til OpenOffice's ordbogs-side og downloade den danske "Spelling"-fil.

Hent ordbogen

Efter at have downloadet ordbogen, der er pakket i en zip-fil, udpakkes denne til mappen "Language" der ligger i mappen hvor TeXnicCenter er installeret. Alle filerne skal med! Hvis du har brugt standard-stien har mappen stien "C:\Programmer\TeXnicCenter\Language".

Det eneste du mangler er så at starte TeXnicCenter op og gå ind i "Tools->Options->Spelling". Her kan du nu vælge sprog som vist herunder. Genstart herefter TeXnicCenter og den danske stavekontrol skulle nu virke.

Opsætning af dansk stavekontrol

Tools

Hvis du ikke har lagt mærke til det, er det i menuen "Tools" i TeXnicCenter muligt at oprette en række eksterne værktøjer der fra menuen så nemt kan kaldes fra TeXnicCenter. Per default er Windows Explorer oprettet, der åbner den aktuelle mappe.

Ved at vælge "Tools->Customize->Tools" kan man selv oprette nye tools, der kan gøre livet nemmere når man arbejder i TeXnicCenter, men lige skal bruge et andet program.

Herunder har jeg samlet en række kommandoer der kunne være rigtig smarte at oprette i dine Tools. De sparer en for en masse klikken rundt i menuer og lignende.

Tool Command Argument Initial directory
Windows Explorer explorer.exe "%dc" %dc
Kommandoprompt cmd.exe   "%dc"
MiKTeX Settings mo.exe    
MiKTeX Update copystart_admin.exe "C:\Programmer\MiKTeX\miktex\config\update.dat"  
daleif's bog C:\Programmer\Adobe Reader 8.0\Reader\AcroRd32.exe "C:\EnEllerAndenSti\daleif.pdf"  
Memoir-manual C:\Programmer\Adobe Reader 8.0\Reader\AcroRd32.exe "C:\EnEllerAndenSti\memoir_manual.pdf"  

Alt afhængigt af hvordan du har struktureret din harddisk, kan stien til Adobe Reader selvfølgelig være anderledes, men det ovenstående giver i hvert fald en ide om hvordan det kan gøres.

Inkludering af grafik

Kommer snart...

%\usepackage{ifpdf} % Kun hvis der ikke bruges memoir
\ifpdf
    \usepackage[pdftex]{color}
    \usepackage[pdftex]{graphicx}
    % Laver eps om til pdf-filer, der kan inkluderes
    % - Kræver at pdfTeX kaldes med -shell-escape
    \usepackage{epstopdf}
    % Fixer MetaPost-filer i pdfTeX:
    \DeclareGraphicsRule{*}{mps}{*}{}
\else
    \usepackage[dvipdfm]{color}
    \usepackage[dvipdfm]{graphicx}
    % Fixer endelse i dvipdfm:
    \DeclareGraphicsExtensions{.eps,.pdf,.jpg,.png}
\fi

% Billed-mapper:
\graphicspath{{.}{./Billeder/}}

% Sæt figurer og tabellers default float til [htbp]:
\makeatletter
\renewcommand{\fps@figure}{htbp}
\renewcommand{\fps@table}{htbp}
\makeatother

\usepackage[rflt]{floatflt} % FloatingFigure
\usepackage{subfig}         % Sub-figure

"Build->Define output profiles..."

-shell-escape

Af en eller anden grund, melder LaTeX denne fejl når man compiler:

Package epstopdf Warning: Shell escape feature is not enabled.

Du kan umiddelbart ignorere denne warning.

TeXify

Kommer snart...

TeXify --src "%pm"
TeXify (PDF) --tex-option=-shell-escape --pdf --src "%pm"
TeXify

Problemer med Adobe Reader 8

Det har vist sig at der er et problem i Adobe Reader 8 med at få åbnet dokumenterne rigtigt når man bruger såkaldte DDE-kommandoer, som man gør når man benytter TeXnicCenter. Der findes dog en hurtig lille "workaround" til dette problem.
Det eneste du skal gøre er at indsætte endnu en [DocOpen("%bm.pdf")] i DDE-kommandoerne til "View projects output" og "Forward search", som vist på billedet herunder:

Define output profiles

Adobe Reader 8 skulle nu virke efter hensigten.

Dog synes jeg det virker som om at Adobe Reader 8 er noget ustabilt og mere eller mindre fyldt med fejl, så jeg ville måske overveje at skifte den ud med Foxit Reader i stedet, i hvert fald indtil Adobe får styr på programmet igen.
Foxit er et ganske lille og hurtigt program der kan vise PDF'er på samme måde som Adobe Reader.

Tegne Feynman-diagrammer med LaTeX

Pakken feynmp gør det rigtig nemt at tegne Feynman-diagrammer ved hjælp af LaTeX.

For at gøre det lidt nemmere for mig selv har jeg defineret følgende environment, ved at indsætte dette stykke kode i preamplen:

\usepackage{feynmp}
\newenvironment{feynmandiagram}[2]{%
	\begin{fmffile}{#1}
		\begin{fmfgraph*}(#2)
}{
		\end{fmfgraph*}
	\end{fmffile}
}

I selve dokumentet kan du så lave et feynman-diagram ved at kalde environmentet på følgende måde:

\begin{feynmandiagram}{unikt navn}{bredde,højde}
	%%% Billede-kode %%%
\end{feynmandiagram}

Nemmere kan det da ikke være! Og dog... Der er én ting der gør det lidt mere besværligt, og det er når tiden kommer til at compile ens projekt.
Uden at gå i for mange detaljer er det der sker når LaTeX laver et feynman-diagram, at den genererer en MetaPost-fil (*.mp) hvor det kræves at du kører MetaPost-programmet på den, inden den kan vises i dit dokument.
Dette er dog rimelig nemt. Du kan ganske enkelt åbne din kommandoprompt og skrive det følgende:

mpost <unikt navn>

Du skal køre mpost-programmet for hver feynman-diagram du har i dit dokument. Og du skal kalde mpost med de unikke navne du har skrevet til hvert diagram!

Du kan selvfølgelig kombinere dette med de sædvanlige output-profiles i TeXnicCenter.
Om dette ikke kan automaticeres lidt mere, har jeg endnu ikke fundet en løsning på, men med den ovenstående fremgangsmåde skulle du i hvert fald være i stand til at producere Feynman-diagrammer.

Nå, nu mangler vi så bare at finde ud af hvordan selve billede-koden skal se ud...

Du starter dit diagram ved at definere hvilke start- og slut-tilstande du har. Dette gøres ved at lave vertices til højre og venstre (og evt. i toppen og bunden) af diagrammet vha. de følgende kommandoer:

\fmfleft{v-list}
\fmfright{v-list}
\fmftop{v-list}
\fmfbottom{v-list}

Den mest centrale kommando er \fmf der tegner linjerne i feynman-diagrammet.

\fmf{style,label=label}{v-list}

v-list er en komma-sepereret liste over de verticies som linjen skal gå igennem. label er den tekst du evt. vil have skrevet ved linjen.
style angiver typen af linje. En liste over nogen af de mulige kan ses herunder.

Styles
fermion, electron, quark fermion
boson, photon boson
gluon gluon
scalar scalar
ghost ghost

Et par andre kommandoer der kan bruges til at forfine ens diagram er de følgende der henholdsvis indsætter en label, laver om på tykkelsen af stregerne og sætter prikker i verticerne.

\fmflabel{label}{v-list}
\fmfpen{width}
\fmfdot{v-list}

Det jeg her har gennemgået er kun en lille brøkdel af de kommandoer og muligheder der er med feynmp-pakken, men vil du vide mere er der kun ét sted at lede:
Dokumentationen til feynmp-pakken.

Hvis du synes det ovenstående er fuldstændig volapyk kan det måske hjælpe at se nogle egentlige eksempler:

Eksempler:

Spredning
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v2,o2}
\fmf{photon}{v1,v2}
W
\fmfleft{i}
\fmfright{o1,o2,o3}
\fmf{fermion}{i,v1,o1}
\fmf{boson}{v1,v2}
\fmf{fermion}{o2,v2,o3}
Spredning-Label
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v2,o2}
\fmf{photon,label=$\gamma$}{v1,v2}
\fmfdot{v1,v2}
\fmflabel{$e^-$}{i1}
\fmflabel{$e^-$}{o1}
\fmflabel{$\mu^+$}{i2}
\fmflabel{$\mu^+$}{o2}
Higgs
\fmfbottom{P1,P2}
\fmftop{P1',H',P2'}
\fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
\fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
\fmfblob{.16w}{g1,g2}
\fmf{gluon,lab.side=right,lab=$x_1P_1$}{g1,v1}
\fmf{gluon,lab.side=right,lab=$x_2P_2$}{v2,g2}
\fmf{fermion,tension=.6}{H,v1,v2,H}
\fmfdot{H,v1,v2}
\fmf{dbl_dots,lab=$H$}{H,H'}
\fmf{fermion}{g1,P1'}
\fmf{fermion}{g2,P2'}
\fmfv{lab=$g(x_1,,Q^2)$,lab.dist=.1w}{g1}
\fmfv{lab=$g(x_2,,Q^2)$,lab.dist=.1w}{g2}
\fmffreeze
\renewcommand{\P}[3]{\fmfi{plain}{vpath(__#1,__#2) shifted (thick*(#3))}}
\P{P1}{g1}{2,0}
\P{P1}{g1}{-2,1}
\P{P2}{g2}{2,1}
\P{P2}{g2}{-2,0}
\P{g1}{P1'}{-2,-1}
\P{g1}{P1'}{2,0}
\P{g2}{P2'}{-2,0}
\P{g2}{P2'}{2,-1}