latex
Счетчики, если утверждения и петли с латексом
Поиск…
Счётная декларация, инициализация и печать в формате pdf
Можно использовать целочисленные переменные с латексом. Чтобы создать новую переменную, нам нужна команда \newcounter{name}
, где name
- это имя нового счетчика. name
должно содержать только буквы. Эта команда создает новый с именем \thename
. С помощью этой команды мы можем напечатать переменную name
на бумаге. Начальное значение name
равно 0. Чтобы присвоить значение «name», мы можем использовать \setcounter{name}{n}
где n - целое число. \value{name}
является функцией , которая возвращает со значением 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}
Операции со счетчиками
В этом примере показано, как использовать математические операции с счетчиками. Это может быть полезно для петель в латексе.
Дополнение: \addtocounter{num}{n}
эта команда добавляет n
к num
, где num
- это счетчик, а n
- положительное целое число.
Вычитание: \addtocounter{num}{-n}
эта команда вычитает n
из num
, где num
- это счетчик, а n
- положительное целое число.
Умножение: \multiply\value{num} by n
эта команда умножает num
на n
, где num
- это счетчик, а n
- целое число.
Раздел \divide\value{num} by n
эта команда делит num
на n
и получает целую часть частного ( num
- это счетчик, а n
- целое число)
\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}
объявляет счетчик. \setcounter{num}{3}
устанавливает значение num в 3.
\addtocounter{num}{10}
добавляет 10 к номеру.
\addtocounter{num}{-3}
вычесть 3 из числа.
\stepcounter{num}
добавляет 1 к num
\multiply\value{num} by \value{num}
квадратов.
\multiply\value{num} by 2
удвоения num.
\divide\value{num} by 60
делит num на 60 и получает целочисленную часть.
Результат кода: 13 \\ 10 \\ 11 \\ 121 \\ 242 \\ 4
(\\ символизирует новую строку)
пакет intcalc добавляет некоторые другие целые операции, например mod, pow, sng, abs, inv ...
Если утверждения
В латексе мы можем использовать встроенные команды для выполнения кода, являются ли условия истинными или нет.
Сравнение двух целых чисел: \ifnum\value{num}>n {A} \else {B}\fi
Этот код выполняет A, если num> n else B. Мы можем заменить> на <и =.
Если число нечетно: \ifodd\value{num} {A}\else {B}\fi
Если num нечетно, то он выполняет A else B.
Если с условием: \ifthenelse{condition}{A}{B}
Мы должны загрузить пакет ifthen, чтобы использовать эту команду. Если условие истинно, то оно выполняет A else B.
Можно создать сложное условие с \( \)
, \AND
, \OR
, \NOT
.
Например: \ifthenelse{\(\NOT 4<2 \OR 4>11\)\AND\isodd{4}}{A}{B}
Этот фрагмент кода записывает «B» на странице. \NOT 4<2
истинно, а 4>11
- false. Если мы связываем ложное и истинное утверждение с «OR», тогда результат будет истинным. Итак, \(\NOT 4<2 \OR 4>11\)
истинно. \isodd{4}
является ложным, поскольку четное 4. Фальшивое и истинное утверждение, связанное с «И», неверно, поэтому выход - B.
Пример кода:
\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. Если мы используем команду, которая включает «@» в ее имени, мы должны поместить ее между \makeatletter
и \makeatother
. Нельзя использовать их в макросе, которое описывает новое определение.
Неправильно:
\def\is#1#2{\makeatletter\@ifstar{#1}{#2}\makeatother
Правильно:
\makeatletter\def\is#1#2{\@ifstar{#1}{#2}}\makeatother
@for loop: \@for\command:={list}\do{commands}
Пример :
\makeatletter
\@for\sun:={rising,setting}\do{The sun is \sun.}
\makeatother
Он создает следующий текст: Солнце растет. Солнце садится.
цикл @whilenum: \@whilenum condition\do{commands}
Пример :
\makeatletter
\newcounter{int}
\@whilenum\value{int}<10\do
{\stepcounter{int}\ifthenelse{\isodd{\value{int}}}{\theint}{}}
\makeatother
Этот код записывает нечетные числа от 1 до 9.
цикл петли цикла: \loop {commands} \ifnum condition \repeat
Выполняет команды до тех пор, пока условие не будет истинным.
пример
\setcounter{int}{1}
\loop
\theint
\addtocounter{int}{2}
\ifnum \value{int}<10
\repeat
Этот код делает то же самое, что и цикл @whilenum.
Пример кода:
\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}
Использование циклов в Tikz
Циклы полезны в Tikz.
Следующий код рисует часы без номеров:
\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}
Результат: