Tex: подробное описание С. М. Львовский


Задача. Пять парней за пять


Download 1.51 Mb.
Pdf ko'rish
bet99/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   95   96   97   98   99   100   101   102   ...   143
Bog'liq
LaTeX-Lvovsky

Задача. Пять парней за пять
дней съели пять окуней. За
сколько дней пятнадцать пар
ней съедят пятнадцать оку
ней?
\z. pQTX PARNEJ ZA PQTX DNEJ
S˙ELI PQTX OKUNEJ. zA SKOLXKO
DNEJ PQTNADCATX PARNEJ
S˙EDQT PQTNADCATX OKUNEJ?
Почему же жирным шрифтом напечаталось не только слово
«Задача», но и весь дальнейший
текст? Ответ: TEX опять пунктуально заменил \z на «замещающий текст», в результате чего
получилось вот что:
\bf zADAˆA. pQTX PARNEJ ...
Команда \bf оказалась не внутри группы, и весь текст пошел жирным шрифтом. Чтобы не
попадаться в такую ловушку, надо помнить, что при развертывании макроса фигурные скоб

ки, ограничивающие замещающий текст в команде \newcommand, отбрасываются. Правиль

нее было бы дать такое определение:
\newcommand{\z}{{\bf zADAˆA}}
На сей раз \z будет заменяться на {\bf zADAˆA} , чего мы и хотели (при развертывании
макроса отбрасывается внешняя пара фигурных скобок, ограничивающая второй аргумент
команды \newcommand, и только она!). Впрочем, наш макрос \z еще не идеален. Во-первых,
точка после слова, напечатанного жирным шрифтом, выглядит лучше, когда и она сама на

брана жирным шрифтом, поэтому точку тоже разумно включить в макроопределение. Да

лее, согласно общему правилу игнорирования пробелов после имени команды, состоящего
из букв, в тексте при этом нельзя будет написать
\z pQTX PARNEJ...
так как при этом пропадет пробел между словом «Задача» и следующим словом. Можно
этот пробел, как водится, всякий раз специально организовать, написав
\z{} pQTX PARNEJ...
но лучше вставить и пробел прямо в определение:
\newcommand{\z}{{\bf zADAˆA. }}
Теперь запись \z pQTX PARNEJ... даст то, что нужно. Впрочем, если угодно, вот еще один
штрих. Если Вы в какой-нибудь момент забудете оставить пустую строку перед очередной за

дачей, то слово
«Задача» при этом будет не начинать абзац, а продолжать предшествующий
текст. Чтобы этого раз и навсегда избежать, можно вставить команду
«закончить абзац» в
наше макроопределение. Как Вы помните, эта команда называется \par (стр.
78
):
\newcommand{\z}{\par{\bf zADAˆA. }}


VII.1. МАКРООПРЕДЕЛЕНИЯ
141
Если перед нашим макросом \z пустая строка все-таки будет, то лишняя команда \par ни на
что не повлияет (см. стр.
78
и ниже), а если ее не будет, то \par сыграет роль недостающей
пустой строки.
После того, как какой-то элемент текста оформлен с помощью макроса, становится удоб

но и менять это оформление. Например, если вдруг понадобилось оформлять все задачи так,
чтобы соответствующие абзацы начинались без отступа, достаточно внести небольшое изме

нение в наше определение команды \z:
\newcommand{\z}{\par\noindent{\bf zADAˆA. }}
Если бы каждую задачу мы оформляли вручную, нам пришлось бы перед каждым сло

вом
«Задача» вписывать команду \noindent. В дальнейшем, когда мы познакомимся с
L
A
TEXовскими «счетчиками», мы усовершенствуем наш макрос \z таким образом, чтобы
он еще и автоматически нумеровал задачи.
Мы уже говорили, что переопределить значение уже существующей команды с помощью \newcommand
невозможно. Иногда, однако, это бывает необходимо. Пример тому приведен в главе
IV
: ес

ли мы хотим, чтобы в заголовках глав печаталось именно слово
«Глава», а не «Chapter», то
необходимо определить по-новому команду \chaptername. Для такого рода целей использу

ется команда \renewcommand. Она устроена точно так же, как \newcommand, с тем отличием,
что в качестве ее первого аргумента надо указывать имя уже существующей команды; в
этом случае по выполнении команды \newcommand значение этой команды изменится: она
превратится в сокращенное обозначение для текста, указанного в качестве ее второго аргу

мента. Например, если написать
\renewcommand{\alpha}{kU-KU}
то команда \alpha будет генерировать не то, что обычно (букву α в математической форму

ле и сообщение об ошибке, если эта команда употреблена вне математической формулы), а
текст
«Ку-ку».
Если команда \renewcommand дана внутри группы, то созданное ею переопределение зна

чения команды забудется по выходе из этой группы. Если в качестве первого аргумента ко

манды \renewcommand указать имя несуществующей команды, то Вы получите сообщение об
ошибке.
Команда \renewcommand при неаккуратном обращении может привести к неприятностям.
Дело в том, что нередко команды L
A
TEXа определяются в терминах других команд L
A
TEXа,
причем знать эти сложные связи рядовой пользователь вовсе не обязан. На практике такое
незнание может привести к тому, что безобидное на первый взгляд использование в своих
целях имени какой-нибудь команды, которая в Вашем тексте ни разу не встречается, вызо

вет необъяснимо неправильную работу других команд. Поэтому используйте \renewcommand
только тогда, когда Вы полностью отдаете отчет в своих действиях.
Выше мы часто называли макросы просто командами, и это
— не просто небрежность речи: на
самом деле принципиальной разницы между TEXовскими командами и макросами почти нет. В част
ности, почти все команды L
A
TEXа, о которых говорилось и еще будет говориться в нашей книге, яв
ляются именно макросами; в отличие от макросов, создаваемых нами с помощью \newcommand, их
смысл уже известен TEXу к моменту запуска программы, так что определять их каждый раз не нужно.
Макросы, в свою очередь, могут ссылаться на другие макросы (кстати, команды \stackrel и \cdot,
на которые ссылалась наша команда \eqdef, также являются макросами). . .
— и так далее, пока не
дойдет до так называемых
«примитивных команд» TEXа. Из команд, о которых мы Вам рассказывали,
примитивными являются считанные единицы: \left и \right, \par, \- и некоторые другие.


VII.1. МАКРООПРЕДЕЛЕНИЯ
142

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   95   96   97   98   99   100   101   102   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling