TeXempelvis

En blogg om typsättning med TeX och LaTeX

Gamla kommandon och paketet nag

Latex och TeX har funnits i många år och många av paketen och kommandona som introducerades då Latex kom har ersatts av nyare eller uppdaterade paket. Ofta är de nyare kommandona tydligare och ger mer konsekvent utseende. På grund av detta bör man vara lite kritisk om man läser gamla instruktioner, som inte alltid är uppdaterade med det nyare kommandona.

Paketet nag varnar om man använder gamla, utdaterade, kommandon. Varningarna skrivs i loggfilen (.log), och börjar ofta Package nag Warning: ..... En sökning på nag i filen ger således lätt tillgång till varningarna.

Paketet används med

1
\RequirePackage[l2tabu, orthodox]{nag}

och bör stå på första raden i Latex-filen, innan dokumentklassen sätts. Anledningen till detta är att även dokumentklassen kan innehålla gammal och utdaterad kod.

Den första inställningarna till nag, l2tabu säger att den ska använda informationen från Das LATEX 2ε-Sündenregister oder Veraltete Befehle, Pakete und andere Fehler. Tipps zu LATEX2ε (l2tabu), som beskriver de gamla kommandona och vad man bör använda istället. Dokumenten är ursprungligen skrivet på tyska, men finns översatt till flera språk. Tyvärr är den engelska översättningen inte lika komplett som originaltyskan, men det är ändå ett dokument som alla bör läsa igenom gärna en eller flera gånger.

Den andra inställningen, orthodox, specificerar att nag ska klaga på syntax som visserligen är korrekt, men som antagligen kommer att producera ett icke önskvärt resultat. Vet man vad det är man gör så är inte den inställningen nödvändig, men den rekommenderas som standardinställning, speciellt om man är nybörjare.

Nedan tänkte jag beskriva några av de viktigaste sakerna att tänka på när det gäller gamla kommandon.

Använd högsta nivån som är tillgänglig

Man kan ofta åstadkomma ett önskat resultat på flera sätt, genom att använda paket eller definiera om olika kommandon. Om man inte har stenkoll på vad implikationerna blir av det man definierar om bör man alltid fråga sig om det finns någon som har gjort liknande innan och skrivit ett paket.

Vill man till exempel byta radavståndet i ett dokument kan man exempelvis göra det på följande tre sätt:

  1. Genom att använda paketet setspace
  2. Genom att använda Latexs kommando \linespread{}
  3. Genom att definiera om TeXs kommando \baselinestretch

I ovanstående exempel kommer användande av paketet setspace göra att man kan använda \singlespacing, \onehalfspacing och \doublespacing. Väldigt tydligt i koden vad kommandon åstadkommer och setspace ser även till att radavståndet inte ändras i exempelvis fotnoter, tabeller och listor.

Latexs kommando \linespread{} tar en faktor som inargument. Det är inte fullt lika intuitivt, för dubbelt radavstånd fås med faktorn 1,6 och halvannat med 1,3. Kommandot \baselinestretch är än mindre intuitivt när man läser koden och kommer antagligen inte att bete sig som man tänkt när man byter typsnitt.

Exemplet ovan är bara ett exempel, det man ska komma ihåg är att om man tänker definiera om någon längd i TeX så bör man vara insatt med hur detta påverkar dokumentet. Kan man inte svara exakt på vad effekterna blir av att ändra längden bör man använda en högre nivå för att åstadkomma samma effekt.

Använd amsmath och rätt matematiklägen

När man skriver matematik i Latex bör man använda de lägen som tillhandahålls av amsmath-paketen. Paketen lägger dels till många kommandon och inställningsmöjligheter, men ser även till att avstånd runt ekvationer och operatorer blir mer konsekventa.

$$ ... $$ ska inte användas

$$ ... $$ är ett kommando från Plain TeX för att gå in i display-läge för matte. Ibland stöter man på folk som använder det även i Latex, men det rekommenderas verkligen inte. Det finns flera anledningar till detta, men avsaknad av möjlighet att numrera ekvationer samt felaktig placering av VSV-symbol är två exempel.

Använd istället \[ ... \] eller \begin{equation} ... \end{equation}.

\( ... \) bör användas istället för $ ... $

$ är en instruktion för att byta till inline matteläge, men det sker inte någon kontroll om det finns någon avslutningen. Det är en av anledningarna till att Latexs \( ... \) bör användas istället. Det är dessutom möjligt att haka på den senare definitionen med några extrakommandon om man använder en gruppering istället.

Uttalanden från utvecklarna av Latex 3 gör tydande att de eventuellt kommer släppa stödet för $-brytaren. Trots det är $ ... $ det vanligaste felet av de som står i det här inlägget och många vet inte ens att \( ... \) finns.

Använd inte eqnarray

eqnarray har många problem och bör inte användas. Nedan står de tre kanske viktigaste, men en längre genomgång finns i en artikel publicerad i PracTeX 2006.

  • avståndet runt ekvationer är inkonsekvent
  • långa ekvationer kan gå ut i marginalen
  • etiketter och referenser kan bli felaktiga

Istället för eqnarray bör align användas.

Använd gärna \newcommand men helst inte \def

Här är ett annat exempel på när man bör använda Latex kommandon istället för TeXs. Både \newcommand och \def låter användaren definiera nya kommandon, vilket är mycket användbart.

Den viktigaste skillnaden mellan \def och \newcommand är att \def inte kontrollerar huruvida kommandot redan är definierat, den skriver glatt över. Detta kan ge underliga resultat om man inte är medveten om att ett annat kommando med samma namn används exempelvis i ett paket. För att ändra definitionen av kommandon finns istället kommandot \renewcommand.

Byta stilsort och stilvikt

TeX och Latex har ett antal kommandon för att byta stilsort och stilvikt, vilka redovisas i tabellen nedan.

TeX Latex   Effekt
………….. Miljö…………….. Brytare……….. ………………
\bf \textbf{} \bfseries Fet stil
\textmd{} \mdseries Mellanfet stil
\it \textit{} \itshape Kursiv stil
\sc \textsc{} \scshape Kapitäler
\sl \textsl{} \slshape Snedställd stil
\sf \textsf{} \sffamily Sans-serif
\tt \texttt{} \ttfamily Skrivmaskinsstil
\rm \textrm{} \rmfamily Normal stilsort
\textup{} \upshape Upprätt stil

Förutom tydligare namn så visar även Latexs kommandon om man man byter stilsort, vikt eller stil. Den största fördelen är dock att de går att kombinera, vilket TeXs inte gör.

1
2
3
\bf\it En text som jag tror är både fet och kursiv

\bfseries\itshape En text som faktiskt är fet och kursiv

I exemplet ovan kommer det översta att stå i kursiv stil, medan det undre exemplet står i både fet och kursiv.

Mer information

Mer information om ämnet finns framförallt i l2tabu, men även i UK-TUGs FAQ och på många av de Latexforum som finns.

Har ni några tips på andra vanliga felaktigheter får ni gärna kommentera i kommentarsfältet nedan.

Comments