1 / 24

Лекция 4

Лекция 4. Типы данных, переменные, операции. ТеХ как язык программирования.

lorie
Télécharger la présentation

Лекция 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция 4 Типы данных, переменные, операции

  2. ТеХ как язык программирования • Фактически, когда мы готовим текст на ТеХе, мы пишем программу, подчиняясь строгим формальным правилам (правда, не всегда явно выписанным, некоторую информацию удается извлечь только из авторского описания ТеХ-машины). • Эти правила превращают ТеХ в язык программирования. Как и в других языках, в нем можно найти (очень своеобразные) • Типы данных и соответствующие им операции, • Переменные, способы их описания и работы с ними, • Конструкции условного исполнения, переключателей и циклов, • Конструкции обменов с внешней памятью. • Некоторые из этих языковых компонент ТеХа и рассмотрены в этой лекции.

  3. Числа и счетчики • В полиграфической системе нельзя обойтись без хотя быэлементарной арифметики. Арифметика нужна уже для счета страниц.На самом деле, вычислительные действия, производимые системой,очень серьезны, и пользователь располагает некоторыми возможностямидоступа к этой системе. Начнем с целочисленной арифметики. • Некоторые параметризованные системные макрокоманды требуют в качествепараметра целого числа. Это число может быть задано непосредственно,а может быть выработано какой-либо конструкцией. Непосредственная записьможет быть десятичной, восьмеричной или шестнадцатеричной.

  4. Запись чисел • Десятичное число пишется как обычно. Перед восьмеричным числом ставится апостроф '. В записи шестнадцатеричных чисел кроме цифр используются большие буквы от A до F, а перед числом ставится двойная кавычка ". • Одно из важнейших применений этих форм записей — задание символов. • Базовые таблицы символов в исходном TeX-е включают по 128 позиций, нумеруемых от 0 до 127, или по-восьмеричному от '0 до '177, а в более современном ТеХе, допускающем восьмибитовую входную кодировку — до '377. Макрокоманда \char### определяет символ номер ### из текущей таблицы шрифтов. • В частности, макрокоманда для знака украинского Г: Ґ выглядит так: \def\Ge{\char128}

  5. Целочисленные переменные • В ТеХе есть и аппарат переменных. Вы можете определить новую целочисленную переменную — счетчик — с помощью команды \newcounter. Например, \newcounter{rx} описывает счетчик rx с начальным значением, равным 0. • Установка нового значения счетчика (присваивание) производится оператором \setcounter, а приращение значений оператором \addtocounter. Первым операндом в этих командах является имя счетчика, а вторым — число. • Для того, чтобы использовать значение счетчика во втором операнде, его надо разыменовать с помощью команды \value: • \setcounter{rx}{7} % rx := 7 • \addtocounter{rx}{7} % rx +:= 7 • \addtocounter{rx}{-3} % rx +:= -3 • \setcounter{rx}{\value{ry}} % rx := ry • \addtocounter{rx}{\value{ry}} % rx +:= ry

  6. Значение счетчика • Для вывода значения счетчика в текст используется команда (автоматически порождаемая), состоящая из \the и названия счетчика. Эта конструкция используется и для других типов переменных, о которых, может быть, еще будет идти речь. • В нашем примере командой будет \therx, и текст печатается в установленном вданный момент формате. Для принудительной смены формата числа, записанного в счетчик, используются следующие команды: • \newcounter{rx}\setcounter{rx}{17} • \arabic{rx} 17 Арабские цифры • \roman{rx} xviiМалые римские цифры • \Roman{rx}XVIIБольшие римские цифры • \alph{rx} qМалые латинские буквы, до 27 • \Alph{rx} QБольшие латинские буквы, до 27

  7. Использование счетчиков • Можно предусмотреть иерархию счетчиков, обеспечивающую автоматический сброс подчиненных счетчиков (например, параграфов, рисунков, таблиц и т.д., для их автономной нумерации внутри каждой главы). • Вот пример. Я хочу нумеровать упражнения внутри каждой главы. Определим новый счетчик • \newcounter{exer}[chapter] • \renewcommand \theexer {\thechapter.\@arabic\c@exer} • В квадратных скобках подчинение этого счетчика счетчику chapter —каждое его изменение обнуляет счетчик exer. • Вторая строчка изменяет действие команды\theexer— номер упражнения будет печататься с номером главы и разделяю-щей точкой. Обратите внимание на использование слов, содержа-щих значок @, это возможно только в особом режиме определений.

  8. Использование счетчиков (продолжение) • После этого мы можем использовать счетчик в новой команде; вот так • \def\NextExer{\Exercise~\refstepcounter{exer}\theexer} • Команда \refstepcounter увеличивает счетчик на 1, обнуляя все подчиненные ему счетчики и гарантируя правильную ссылку на номер счетчика (о чем мы будем говорить отдельно).

  9. Единицы измерения для размеров • Линейные величины (размеры) могут выражаться в разных единицах, и TeX допускает использование довольно разнообразных единиц с естественным переводом одних в другие (внутреннее представление одно, отличие только при опреде-лении самих размеров). Нам естественно начать с обычных для нас метрических единиц — сантиметра cm и миллиметра mm. • Бытовая американская единица— это дюйм 2.54 см ( inch), обозначаемый in. Для непосредственного использования в полиграфических целях эти единицы не очень удобны, и традиционно используются более мелкие пункты, формальный размер которых 1/72 часть дюйма.

  10. Пункты • В зависимости от того, какой дюйм взят за основу, меняется и размер пункта. Так, в русской полиграфии традиционно исполь-зуется старо-французский пункт dd, введенный основополож-ником измерений в полиграфии Ф. Дидо ( F. Didot), в английской и американской полиграфии либо старо-английский пункт pt (это самая распространенная единица), либо современный пункт bp (называемый еще большим пунктом). Их размеры таковы: • 1 dd = 0.377475 mm • 1 pt = 0.35146 mm • 1 bp = 0.352778 mm • Производные от этих размеров • пайка или пика (pica, pc) — 12 основных пунктов и, аналогично, цицеро (cicero, cc) — 12 пунктов Дидо. • Pica (лат) —свод правил для вычисления времени Пасхи и других праздников с переменной датой.

  11. Размеры • Рекомендуется не злоупотреблять свободой использования единиц размеров (кстати, это относится и ко всем другим случаям), а выбрать минимальный удобный набор. • Теперь, используя названные единицы, можно ввести в употребление размеры как новый тип данных. • Размером или явной длиной называется число, записанное в одной из принятых в ТеХе систем записи (мы ограничимся обычными десятичными) и сопровождаемое единицей измерения: • 10pt 3cc 17.2cm • Имеются еще растяжимые длины, в которых, кроме основного размера, определяются еще возможные приращения с плюсом и минусом. Например, • 10pt plus 2pt minus 1pt

  12. Команды с размерами • Некоторые команды требуют размера в качестве параметра. Здесьмы можем уже ввести в обращение команды вертикальной и горизонтальнойотбивки, т.е. дополнительного пробела; • \vspace{4pt} Вертикальная отбивка в 4 пункта • \vspace*{4pt} Вертикальная отбивка даже в начале страницы • \hspace{4pt}Горизонтальная отбивка в 4 пункта • \hspace*{4pt} Горизонтальная отбивка даже в начале строки • Можно вводить и переменные типа размер, такая переменная описываетсяс помощью \newlength, значение ей может присвоить команда \setlength, увеличить - \addtolength. • Перевод строки допускает в качестве факультативного параметра размердополнительного интерлиньяжа, например, • \\[6pt] % увеличение • \\[-4pt] % уменьшение

  13. Использование размеров • Некоторые параметры набора заранее определены как размеры, их значениями можно пользоваться и даже менять внутри файла (однако, так, чтобы не ставить систему в трудное положение). Например, абзацный отступ определяется размером \parindent, а ширина текста — размером \textwidth. • Чтобы набрать текст с большим абзацным отступом (в 1/4 ширины текста) нужно изменить абзацный отступ: • \setlength{\parindent}{0.25\textwidth} • Результат будет таким:

  14. Линейки • Важный типографский знак, размер которого может задаваться непосредственно, — это сплошной прямоугольник, который называется линейкой, так как обычно используется с сильно различающимися шириной и высотой. Тем не менее, и вертикальная и горизонтальная линейка — это просто прямоугольники \rule<длина><ширина>. Пример полезного прямоугольника — бабашка — квадратный прямоугольник , который сейчас любят ставить в конце доказательства вместо традиционного раньше Q.E.D. — Quod erat demonstrandum: • \def\QED{\rule{8pt}{8pt}}

  15. Фигуры из линеек • Макрокоманда \rule имеет еще факультативный (optional) параметр,задающий подъем нижнего среза линейки над базовой линией наборастроки. Этот параметр, когда он используется, задается первыми в квадратных скобках. • Пример: \dachshund- прямоугольники немного сдвинуты назад,что достигается важной командой \kern, параметр которой —размер сдвига вправо — может принимать и отрицательные значения • \def\dachshund{\rule[6pt]{10pt}{6pt}\kern-1pt • \rule{30pt}{6pt}\kern-2.4pt\rule[6pt]{4.4pt}{12pt}} • Нужно еще упомянуть два очень важных размера. Они зависят от текущихустановок шрифтов: em и ex. Первый из них — этогоризонтальный размер, задаваемый \quad в текущем шрифте, а второй —вертикальный размер буквы х. Сравните, • {{\LARGE M\rule{2em}{1ex}x} и {\Large M\rule{2em} • {1ex}x} и {\large\tt M\rule{2em}{1ex}x}}

  16. Условное исполнение • Д.Кнут применил в ТеХе очень интересную, в каком-то смысле первобытную, конструкцию для логических переменных. • Логическая переменная определяется как условие, при выполне-нии которого должны выполняться те или иные действия. Каждое такое условие имеет имя, состоящее из обязательного \if и произвольного дополнительного идентификатора, возьмем для определенности OK. • Условие вводится командой:\newif\ifOKи при этом автоматически описываются две команды OKtrue и OKfalse, устанавливающие состояние выполнения и нарушенияэтого условия. Условие используется в конструкциях • \ifOK Исполняемый текст \fi • \ifOK Текст-ДА \else Текст-НЕТ \fi

  17. Применение условного исполнения • Вот простое и элегантное использование условной конструкции для того, чтобы варьировать текст в зависимости от того, окончательный это вариант или еще рабочий • (Получено по e-mail 11.4.1993, автор -Richard Tenney) • Описывается новое условие: \newif\ifdraft и устанавливаетсязначение черновик • \newif\ifdraft • \drafttrue • для значения чистовик достаточно закомментировать вторую строчку. В следующим за этим тексте можно пользоваться конструкциями • \ifdraftтекст для черновика • \else текст для окончательного набора • \fi

  18. Стандартные условия • Исходный TeX включает несколько макрокоманд с параметрами и без,вырабатывающих условия. Рассмотрим некоторые из них. • Команда \ifmmode вырабатывает условие идет набор математическойформулы. Этим условием можно пользоваться для определения знака,который набирается только в математическом наборе, но можетиспользоваться и независимо. Например, • \def\bullt{\ifmmode\bullet\else$\bullet$\fi} • С помощью макроса \ifodd<число>можно проверить четное число или нечетное. Это важнов двухполосном наборе, т. е. в двухколонном набореполосыи при различном оформлении страниц разворота книги.

  19. Переменный интерлиньяж • Вот пример интерлиньяжа, меняющегося через раз, в восточном бейтовом строении стиха (в газелях, например): • \newcounter{glN} • \def\glin{\addtocounter{glN}{1}% • \ifodd\theglN\\[-2pt]\else\\[10pt]\fi} • Дам турчанке из Шираза Самарканд, а если надо\glin • Бухару и в благодарность жажду родинки и взгляда.\glin • Дай вина. До дна. О, кравчий, ведь в раю уже не будет\glin • Муссалы дворцов роскошных и потоков Рукнабада.\glin

  20. Сравнение чисел • Два целых числа можно сравнить с помощью макроса • \ifnum<число><отношение><число> • где параметр <отношение>может принимать значения <, > или =. Например, • \ifnum\thepage>15 ... \fi

  21. Циклы • В ТеХе есть и циклы. • Для их организации используется конструкция из двух макрокоманд \loopи \repeat. При этом после \loopдолжна быть \if-овая команда, а макрос \repeatзавершает конструкцию. • С помощью цтклов можно нарисовать, например, вот такую картинку

  22. Текст примера с предыдущей страницы • \newcounter{spa}\newcounter{i} • \def\rulefill{\leaders\hbox{\rule{0.5mm}{6pt}}\hfill} • \def\spala{\ifodd\thespa\rulefill\else\hfill\fi • \addtocounter{spa}{1}} • \def\spaline{\noindent\strut\setcounter{i}{15} • \loop\ifnum\thei>0 • \spala\addtocounter{i}{-1} • \repeat\hfill\strut} • \spaline\vskip-6pt\spaline\vskip-6pt • \spaline\vskip-6pt\spaline • \strut – это линейка нулевой ширины (знак, очень удобный для многих технических действий)

  23. Переключатели. • Типичный пример использования конструкции переключателя даетмакрокоманда \today, которая использует три системныхмакроса \day, \monthи \year, вырабатывающиесоответственно день, месяц и год данного пропуска программы. • \def\today{\ifcase\month\orJanuary\or February\or March\or April\or May\or June\orJuly\or August\or September\or October\orNovember\or December\fi\space\number\day, \number\year} • Первая конструкция этой макрокоманды и есть переключатель. Он начинаетсяс \ifcase, за которым следует целочисленный параметр, в данномслучае вырабатываемый макросом \month. За ним следуют действия,соответствующие значениям параметра 0 и т. д., разделяемые макросом\or. Конструкция кончается закрывающейскобкой \fi. • Два других числовых параметра предваряются макросом\number, переводящим число в представляющую его строку.

  24. Еще о формате представления даты • Программирование в ТеХе не так просто. Посмотрим другую форму представления даты, часто используемую в России: • \def\rustoday{\number\day/$\underline{\overline% • {\mbox{\rm\uppercase\expandafter{\romannumeral% • \month}}}}$--\number\year} • Сегодня • Здесь потребуются некоторые дополнительные объяснения. Команда \romannumeral аналогична команде \number, но переводит число в последовательность строчных римских цифр. Эти буквы в прописные переводит команда \uppercase{...}. Но, прямая запись \uppercase{\romannumeral\month} работает неправильно, так как команда \uppercase{...} берет следующий за ней текст и воспринимает его как строку. Макрокоманда \expandafter служит для задержки передачи параметра до исполнения следующей команды.

More Related