Дополнительные возможности
Иногда бывает нужно нанести на псевдорисунок несколько регулярно расположенных объектов. В этом случае, вместо того чтобы много раз писать \put, удобно воспользоваться командой \multiput. Она располагает на псевдорисунке несколько одинаковых объектов на равных расстояниях. Синтаксис этой команды таков:
\multiput(x,y)(?x ?y){n}{объект}Здесь
и - координаты первого из размещаемых объектов (как и в обычной команде \put), и — расстояния, на которые каждый следующий объект будет сдвинут относительно предыдущего по горизонтали и вертикали, — количество объектов, которые надо разместить, и, наконец, объект — это, как и у команды \put, описание того, что мы размещаем на рисунке. Пример: \begin{picture}(100,80) \multiput(10,70)(8,-6){8}% {\circle*{3}} \end{picture}Обратите внимание на использование знака процента для удаления нежелательного пробела, создаваемого концом строки. Вот еще один пример; здесь с помощью команды \multiput рисуется решеточка:
\begin{picture}(100,50) \multiput(0,0)(10,0){10}% {\line(1,5){10}} \multiput(0,0)(2,10){6}% {\line(1,0){90}} \end{picture}Использование команды \multiput так, как это было сделано в предыдущем примере, ведет к неоправданным затратам машинного времени. Например, каждый из наклонных отрезков собирается из маленьких символов, причем TeX'у приходится повторять эту скучную операцию 10 раз. Разумнее было бы собрать этот отрезок лишь единожды, а дальше его просто копировать. Это можно сделать с помощью "блоковых переменных". Мы расскажем об этом в лекции 8 .
Иногда, когда псевдорисунок достаточно сложен, удобно применить следующий прием: задать в качестве аргумента одной из команд \put целое окружение {picture}(точкой отсчета будет служить левый нижний угол). При этом вы сможете отсчитывать координаты объектов на " подрисунке" относительно самого подрисунка, а не внешнего рисунка, что часто бывает проще; кроме того, если понадобится сдвинуть этот "подрисунок" как единое целое, то для этого будет достаточно изменить аргументы в одной-единственной команде \put.
Вот пример рисунка с подрисунком ( будем считать, что это классная доска, на которой нарисованы оси координат):
Этому рисунку соответствовал такой исходный текст:
\begin{picture}(120,80) % Края доски: \put(0,0){\line(1,0){120}} \put(0,80){\line(1,0){120}} \put(0,0){\line(0,1){80}} \put(120,0){\line(0,1){80}} % Оси координат: \put(40,25){\begin{picture}(40,40)% \put(20,0){\vector(0,1){40}} \put(0,20){\vector(1,0){40}} \put(40,22){x} \put(22,40){y} \end{picture}} \end{picture} Кстати говоря, размеры внутренней картинки можно было бы задать совершенно произвольно, например, (200,200)} или даже (0,0)} — команда \put бездумно размещает объекты таким образом, чтобы их точки отсчета имели указанные координаты, и при этом не интересуется, сколько места они реально занимают и не наложатся ли на текст или другие объекты.
Нередко требуется сдвигать не какую-то часть псевдорисунка, а весь псевдорисунок как целое (например, если вы ищете оптимальное расположение иллюстрации по отношению к тексту). Для этого удобно использовать еще одну возможность окружения {picture}: можно задать его таким образом, чтобы начало координат было не в левом нижнем углу, а в любой другой точке. Для этого после \begin{picture} надо задать не одну, а две пары чисел в круглых скобках. В этом случае первая пара чисел будет, как и прежде, обозначать ширину и высоту места, выделяемого LaTeX'ом на псевдорисунок, а вторая пара будет указывать, каковы координаты левого нижнего угла этого псевдорисунка (по умолчанию, т. е. если второй пары чисел в круглых скобках нет, они были бы просто (0,0)}). Главное только — не напутать со знаками: если вы сказали
\begin{picture}(a,b)(x,y) то это значит, что левый нижний угол псевдорисунка имеет координаты , стало быть, по сравнению со случаем, когда , весь псевдорисунок сдвинется на по горизонтали и на по вертикали! Если вы ничего не поняли, посмотрите на следующий пример, в котором второй псевдорисунок сдвигается на единиц вправо и на единиц вверх по отношению к первому:
\begin{picture}(150,80) \put(0,0){\line(1,0){140}} \put(0,70){\line(1,0){140}} \put(0,0){\line(0,1){70}} \put(140,0){\line(0,1){70}} \put(25,30){\Huge Сдвиг} \end{picture}\\[25pt] \begin{picture}(150,80)(-20,-10) \put(0,0){\line(1,0){140}} \put(0,70){\line(1,0){140}} \put(0,0){\line(0,1){70}} \put(140,0){\line(0,1){70}} \put(25,30){\Huge Сдвиг} \end{picture}