Tex: подробное описание С. М. Львовский
Задача. Пять парней за пять
Download 1.51 Mb. Pdf ko'rish
|
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, \- и некоторые другие. |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling