Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4015 / 1341 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Лекция 5:

Псевдорисунки

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >

Дополнительные возможности

Иногда бывает нужно нанести на псевдорисунок несколько регулярно расположенных объектов. В этом случае, вместо того чтобы много раз писать \put, удобно воспользоваться командой \multiput. Она располагает на псевдорисунке несколько одинаковых объектов на равных расстояниях. Синтаксис этой команды таков:

\setminus multiput(x,y)(\Delta x \Delta y){\ n}{\ объект}

Здесь x и y - координаты первого из размещаемых объектов (как и в обычной команде \put ), \Delta x и \Delta y — расстояния, на которые каждый следующий объект будет сдвинут относительно предыдущего по горизонтали и вертикали, n — количество объектов, которые надо разместить, и, наконец, объект — это, как и у команды \put, описание того, что мы размещаем на рисунке. Пример:

\begin{picture}(100,80)
\multiput(10,70)(8,-6){8}%
{\circle*{3}}
\end{picture}
\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}
\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}

Этому рисунку соответствовал такой исходный текст:

\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)

то это значит, что левый нижний угол псевдорисунка имеет координаты (x,y), стало быть, по сравнению со случаем, когда x=y=0, весь псевдорисунок сдвинется на -x по горизонтали и на -y по вертикали! Если вы ничего не поняли, посмотрите на следующий пример, в котором второй псевдорисунок сдвигается на 20 единиц вправо и на 10 единиц вверх по отношению к первому:

\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}
\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}

Параметры оформления псевдорисунка

Про один из таких параметров мы уже говорили - это единица измерения длин на псевдорисунке, обозначаемая \unitlength.

В какой-то мере можно регулировать и толщину линий на наших псевдорисунках. Для этого предусмотрены команды \thinlines (тонкие линии) и \thicklines (толстые линии). По умолчанию стоит режим, в котором линии будут тонкими. Команды \thicklines и \thinlines можно давать не только в преамбуле, но и в самом тексте (в том числе и внутри окружения picture}, так что можно регулировать, какие линии будут толстыми, а какие тонкими). Если одна из этих команд дана внутри группы, то по окончании группы ее действие прекращается (не забывайте, что любое окружение само по себе образует группу).

Кроме того, можно задать произвольным образом толщину вертикальных и горизонтальных (но не наклонных!) линий. Для этих целей служит команда \linethickness. У этой команды один обязательный аргумент — толщина линий, выраженная в TeX'овских единицах длины. Если мы скажем

\linethickness{2.5mm}

то все вертикальные и горизонтальные отрезки на псевдорисунке будут иметь толщину 2.5мм, и такой же будет сторона квадратиков, из которых составляются кривые.

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров