latex
Räknare, om uttalanden och slingor med latex
Sök…
Motdeklaration, initialisering och utskrift till pdf
Det är möjligt att använda heltalvariabler med latex. För att skapa en ny variabel behöver vi \newcounter{name}
, där name
är namnet på den nya räknaren. name
får endast innehålla bokstäver. Detta kommando skapar ett nytt med namn \thename
. Med detta kommando kan vi skriva ut name
på papperet. Det ursprungliga värdet för name
är 0. För att ge värde till "namn" kan vi använda \setcounter{name}{n}
där n är ett heltal. \value{name}
är en funktion som returnerar med name
.
\documentclass{article}
\begin{document}
\newcounter{num} %new counter, initial value is 0
\thenum %print 0
\setcounter{num}{3} %set num to 3
\thenum %print 3
\newcounter{number}
\setcounter{number}{\value{num}} %set number to value of num
\thenumber %print 3
Latex provides some other formats to print a number.
Other types of printing:
\arabic{num}\\
\Roman{num}\\ %→ I, II, III, IV, . . . (num = 1, 2, 3, . . . )
\roman{num}\\ %→ i, ii, iii, iv, . . . (num = 1, 2, 3, . . . )
\Alph{num}\\ %→ A, B, C, D, . . . (num = 1, 2, 3, . . . , 26)
\alph{num}\\ %→ a, b, c, d, . . . (num = 1, 2, 3, . . . , 26)
\fnsymbol{num}\\ %→ ∗, †, ‡, §, ¶, k, ∗∗, ††, ‡‡ (num = 1, 2, 3, . . . , 9)
\end{document}
Verksamhet med räknare
Detta exempel visar hur man använder matematiska operationer med räknare. Det kan vara användbart för slingor i latex.
Tillägg: \addtocounter{num}{n}
detta kommando lägger till n
till num
, där num
är en räknare och n
är ett positivt heltal.
Subtraktion: \addtocounter{num}{-n}
detta kommando drar n
från num
, där num
är en räknare och n
är ett positivt heltal.
Multiplikation: \multiply\value{num} by n
detta kommando multiplicerar num
med n
, där num
är en räknare och n
är ett heltal.
Division \divide\value{num} by n
detta kommando delar num
n
och får heltalets del av kvoten ( num
är en räknare och n
är ett heltal)
\documentclass{article}
\begin{document}
\newcounter{num}
\setcounter{num}{3}
\addtocounter{num}{10}
\thenum\\%prints 13
\addtocounter{num}{-3}
\thenum\\%prints 10
\stepcounter{num}
\thenum\\%prints 11
\multiply\value{num} by \value{num}
\thenum\\%prints 121
\multiply\value{num} by 2
\thenum\\%prints 242
\divide\value{num} by 60
\thenum%prints 4
\end{document}
\newcommand{num}
förklarar räknaren. \setcounter{num}{3}
sätter num-värdet till 3.
\addtocounter{num}{10}
lägger 10 till num.
\addtocounter{num}{-3}
subtrahera 3 från num.
\stepcounter{num}
lägger till 1 till num
\multiply\value{num} by \value{num}
kvadrater num.
\multiply\value{num} by 2
dubblar num.
\divide\value{num} by 60
dividerar num med 60 och får heltalets del.
Resultatet av koden: 13 \\ 10 \\ 11 \\ 121 \\ 242 \\ 4
(\\ symboliserar ny linje)
intcalc-paketet lägger till några andra heltalstransaktioner t.ex. mod, pow, sng, abs, inv ...
Om uttalanden
I latex kan vi använda inbyggda kommandon för att köra kod oavsett om villkoren är sanna eller inte.
Jämför två heltal: \ifnum\value{num}>n {A} \else {B}\fi
Den här koden kör A om num> n annars B. Vi kan ersätta> med <och =.
Om ett nummer är udda: \ifodd\value{num} {A}\else {B}\fi
Om num är udda, kör den A annat B.
Om med villkor: \ifthenelse{condition}{A}{B}
Vi måste ladda ifthen-paketet för att använda detta kommando. Om villkoren är sanna, körs det A annat B.
Det är möjligt att skapa komplexa villkor med \( \)
, \AND
, \OR
, \NOT
.
Till exempel: \ifthenelse{\(\NOT 4<2 \OR 4>11\)\AND\isodd{4}}{A}{B}
Den här koden skriver ned "B" på sidan. \NOT 4<2
är sant och 4>11
är falskt. Om vi ansluter ett falskt och ett riktigt uttalande med "ELLER" är resultatet sant. Så \(\NOT 4<2 \OR 4>11\)
är sant. \isodd{4}
är falsk eftersom 4 är jämn. Ett falskt och ett riktigt uttalande kopplat till "OCH" är falskt, så utgången är B.
Exempel på kod:
\documentclass{article}
\usepackage{ifthen}
\begin{document}
\newcounter{num}
\setcounter{num}{10}
If num$>$100 then the next sentence will be "Num is large." else "Num is small."
Num is \ifnum \value{num}>100 {large} \else {small}.
If num is odd then the next sentence will begin with "Odd" if not then with "Even"
\ifodd \value{num} {Odd} \else {Even} numbers are cool.
If (num$>$3 and (1$<$0 or num$=$10)) is true then the next sentence will be "True." else "False."
\ifthenelse{\value{num}>3\AND\(1<0 \OR \value{num}=10\)}{True.}{False.}
\end{document}
Loops - upprepar saker
Vi kan skapa öglor i latex. De är likadana men inte lika anpassningsbara som slingor på andra programmeringsspråk. Ett alternativ till att använda slingor är @ loops. Om vi använder ett kommando som innehåller "@" i dess namn, måste vi lägga det mellan \makeatletter
och \makeatother
. Det är inte tillåtet att använda dem i ett makro som beskriver en ny definition.
Fel:
\def\is#1#2{\makeatletter\@ifstar{#1}{#2}\makeatother
Rätt:
\makeatletter\def\is#1#2{\@ifstar{#1}{#2}}\makeatother
@for loop: \@for\command:={list}\do{commands}
Exempel :
\makeatletter
\@for\sun:={rising,setting}\do{The sun is \sun.}
\makeatother
Det skapar följande text: Solen stiger upp. Solen går ner.
@whilenum loop: \@whilenum condition\do{commands}
Exempel :
\makeatletter
\newcounter{int}
\@whilenum\value{int}<10\do
{\stepcounter{int}\ifthenelse{\isodd{\value{int}}}{\theint}{}}
\makeatother
Denna kod skriver udda nummer från 1 till 9.
loop "repetition": \loop {commands} \ifnum condition \repeat
Utför kommandon tills villkoret är sant.
Exempel
\setcounter{int}{1}
\loop
\theint
\addtocounter{int}{2}
\ifnum \value{int}<10
\repeat
Den här koden gör samma sak som @whilenum loop.
Exempel på kod:
\documentclass{article}
\usepackage{ifthen}
\usepackage{amsmath} %\text{} command needs this package
\begin{document}
Demonstration of @for loop:
\makeatletter
\@for\sun:={rising,setting}\do{The sun is \sun. }
\makeatother
\newcounter{int}
@whilenum loop:
\setcounter{int}{0}
\makeatletter
\@whilenum\value{int}<20\do
{\stepcounter{int}\ifthenelse{\isodd{\value{int}}}{\theint\text{ }}{}}
\makeatother
"loop repeat" loop:
\setcounter{int}{1}
\loop
\theint
\text{ }\addtocounter{int}{2}\ifnum\value{int}<20
\repeat
\end{document}
Använda slingor i Tikz
Loops är användbara i Tikz.
Följande kod drar en klocka utan nummer:
\documentclass{article}
\usepackage{ifthen}
\usepackage{intcalc}
\usepackage{tikz}
\newcounter{num}
\begin{document}
\begin{tikzpicture}
\makeatletter
\setcounter{num}{1}
\newcounter{angle}
\draw (0,0) circle (3cm);
\@whilenum\value{num}<13\do{
\setcounter{angle}{360}
\multiply\value{angle} by \value{num}
\divide\value{angle} by 12
\ifnum \intcalcMod{\value{num}}{3}=0{
\draw[line width=4pt] (\theangle:2cm) -- (\theangle:3cm); }\else
{
\draw[line width=1pt] (\theangle:2.3cm) -- (\theangle:3cm);
}\fi
\addtocounter{num}{1}
}
\makeatother
\end{tikzpicture}
\end{document}
Resultatet: