На блоге уже была заметка про втискивание данных в графики с помощью гнуплота. Так как статьи, кроме графиков, содержат ещё и текст, эта заметка есть логичное продолжение оной про гнуплот. И если для нагнетания объёма страниц много ума не надо, то впихивание текста в ограниченный объём требует изобретательности достойной лучшего применения.
\usepackage{lipsum}
который генерирует известный текст``lorem ipsum'':
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat...Это, как уверяет нас википедия, искажённый отрывок из философского трактата Цицерона «О пределах добра и зла», написанного в 45 году до нашей эры на латинском языке. Для генерации этого текста следует дать команду:
для генерации множества параграфов Lorem Ipsum.\lipsum[3-56]
Грубые методы
Если изящество текста и красота набора нас не волнуют, то прежде всего стоит прибегнуть к ломовым методам грубой силы типа изменения междустрочного интервала и сужения полей до непристойных размеров.
В данном примере мы указали поля по 1 см.\usepackage{geometry} \geometry{left=1cm} \geometry{right=1cm} \geometry{top=1cm} \geometry{bottom=1cm}
и далее в тексте по месту используем:\usepackage{setspace}
Но это для увеличения интервалов :-) Сейчас поправим:\onehalfspacing \doublespacing
Вместо значения {1.25} подставить своё по вкусу, в зависимости от целей: значение больше единицы увеличивает расстояние между строками, меньше единицы - уменьшает. На примере:\begin{spacing}{1.25} Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. \end{spacing}
показано изменение параметра \begin{spacing}{ХХX} (сверху вниз) до значения{0.75}, {0.8}, {1}, {1.25} и {1.5} соответственно.
Command | Nominal Point Size | Exact Point Size |
---|---|---|
\tiny | 5 | 5 |
\scriptsize | 7 | 7 |
\footnotesize | 8 | 8 |
\small | 9 | 9 |
\normalsize | 10 | 10 |
\large | 12 | 12 |
\Large | 14 | 14.40 |
\LARGE | 18 | 17.28 |
\huge | 20 | 20.74 |
\Huge | 24 | 24.88 |
Так что теперь мы себе представляем, насколько текст может оказаться \huge и сколь \tiny он будет на печати.
Утончённые методы
Рассмотренные выше методы очень грубые и с головой выдают халтуру. Часто ими пользоваться нельзя в принципе - например, если вы готовите текст для конференции, где, как правило, есть свой шаблон, за изменение которого вы гарантированно получите по ушам и будете оформлять текст заново. Мы же займёмся более изящными методами, которые позволят вместить больше текста в тот же объём страниц при соблюдении (или во всяком случае без серьёзных нарушений) имеющегося шаблона.
\newenvironment{itemize*}% {\begin{itemize}% \setlength{\itemsep}{1pt}% \setlength{\parskip}{1pt}}% {\end{itemize}} \newenvironment{enumerate*}% {\begin{enumerate}% \setlength{\itemsep}{1pt}% \setlength{\parskip}{1pt}}% {\end{enumerate}}
Это создаст новые окружения itemize* и enumerate* соответственно, списки в которых будут расположены куда плотнее обычного.
И теперь в тексте используем окружения
\begin{enumerate*} .... \end{enumerate*}
И вот как это выглядит:
Сноски
Да, сноски - наши большие друзья, так как они оформляются шрифтом меньшего размера. Для этого в преамбулу добавляем:
что даст нам новые команды \footnoteremember для постановки ссылки на сноску и \footnoterecall для ссылки на сноску, соответственно:\newcommand{\footnoteremember}[2]{\footnote{#2} \newcounter{#1} \setcounter{#1}{\value{footnote}}} \newcommand{\footnoterecall}[1]{\footnotemark[\value{#1}]}
Прелесть сносок в том, что обычно редакция не опускается до таких мелочей и длину сносок не лимитируют, так что можно гнать этого зайца и дальше, впихивая куски текста "под кат".\footnoteremember{footnoteT420}{The IBM/Lenovo T420 notebook was used for the numerical simulations.} (see footnote \footnoterecall{footnoteT420})
Расстояние между словами в тексте
Можно попробовать сократить расстояние между словами в ЛаТеХ до разумных пределов с помощью команды \fontdimen2. Вот пример кода, который это делает:
\documentclass{article} \usepackage{lipsum} \begin{document} \newdimen\origiwspc% \newdimen\origiwstr% \origiwspc=\fontdimen2\font% original inter word space \origiwstr=\fontdimen2\font% original inter word stretch \lipsum[1]% normal text \fontdimen2\font=0.2ex% inter word space \lipsum[1]% decreased inter word space \fontdimen2\font=\origiwspc% (original) inter word space \fontdimen3\font=0.1em% inter word stretch \lipsum[1]% decreased inter word stretch \fontdimen3\font=\origiwstr% (original) inter word stretch \fontdimen2\font=1em% inter word space \lipsum[1]% increased inter word space and stretch \fontdimen2\font=\origiwspc% (original) inter word space \fontdimen3\font=\origiwstr% (original) inter word stretch \lipsum[1]% original/normal text \end{document}
и как это выглядит (картинка кликабельна, но весит почти 1Мб):
From Изображения Blogger |
Иллюстрации с обтеканием
Плавающие иллюстрации с обтеканием - уже кража со взломом, то есть в журнале за такое скорее всего дадут по шапке. С конференциями есть варианты: например, в SPIE, в которых я участвую, на это обычно закрывают глаза.Можно попробовать сделать так:
\begin{wrapfigure}[16]{r}{0.5\linewidth}
\vspace{-5ex}
\centering \includegraphics[width=1\linewidth]{constr_cases_illustrations}
\caption{\textit{Constraints subcases.}
\label{fig:constr_cases_illustrations}
\end{wrapfigure}
Подсвеченные параметры означают:
- [16] - определяет высоту рисунка в число строк текста и позволяет добавить строк для правильного обтекания.
- {r} - положение картинки на странице, можно слева {l} или справа {r}.
- {0.5\linewidth} - ширина картинки в долях от ширины страницы.
Также вы можете получить слишком много (или мало) пробелов в верхней или нижней части обтекаемого рисунка. Вот тут нам поможет дополнительный аргумент [lineheight], который в данном примере задан как [16]. Он определяет высоту рисунка в строках текста.
Другой возможностью является добавление или удаление промежутков с помощью команды \vspace. В данном примере \vspace{-5ex} мы заставляем ЛаТеХ сместить картинку немного вверх, чтобы выиграть место для текста.
Всё это, конечно, смотрится несколько криво и выдаёт нашу цель впихнуть материала побольше, что в общем не криминал, а мелкое жульничество.
14 комментариев: |высказаться!| RSS-лента дискуссии.|
Для того, чтобы шрифт сделать больше или меньше
Лучше «чтобы буквы сделать» — избегаем тавтологии.
Иногда хорошо бы знать, каков размер в pt этих шрифтов:
«Иногда хорошо бы знать их размер в pt». Причина та же.
От списков, кстати, лучше вообще отказаться сразу же - занимают слишком много места.
Отличный совет! Этак ты скоро начнёшь рекомендовать вместо мороки с LaTeX писать формулы от руки и потом вставлять в документ (.docx, не иначе) картинки.
Но да, с тем, что списки жрут неоправданно много места — согласен. Всегда приходится ужимать их немного.
используоем
Спеллчекер тебе таки не помешал бы :)
Ох шит! А этот пост вообще-то черновик. Как это я прозевал его публикацию!? Посыпаю голову пеплом.
Так, сейчас поправим. Пост обновлён и существенно дополнен другим постом, который, собственно, и должен быть опубликован. И не в субботу, а в понедельник, но теперь уже неважно...
Можно ув.тов. Главного Редактора попросить глянуть на текст орлиным взором ещё разик?
@Minoru комментирует...
Для того, чтобы шрифт сделать больше или меньше
Исправлено.
Иногда хорошо бы знать их размер в pt». Причина та же.
Согласен, лучше.
Отличный совет! Этак ты скоро начнёшь рекомендовать вместо мороки с LaTeX писать формулы от руки
Слющи, самы умны, да? :-)
Серьёзно, Минору, они занимают просто конское место. Или это SPIEовцы накосячили в шаблоне, но всё равно - избавившись от списков, я треть страницы в статье выдоил.
списки жрут неоправданно много места — согласен.
А то. Рецепт было найти на удивление непросто.
Спеллчекер тебе таки не помешал бы :)
Как это говорят на ЛОРе? "Эта статья содержит слишком мало орфографических ошибок. Её следует проверить Шаманом" :-)
И да, пост существенно улучшен.
На мой взгляд, неоправданно мало внимания уделяется могучему средству \vspace. С его помощью можно, например, уменьшить размер отступа перед началом новой секции или абзаца (например, если мне надо селать это всего один раз в документе, то мне лень вспоминать, как переопределяется стиль, а на \vspace{-5mm} уходит ровно две секунды). Можно ручками задать интерлиньяж в конкретном списке itemize или enumerate. Да массу полезных вещей можно сделать.
@riki-koen комментирует...
На мой взгляд, неоправданно мало внимания уделяется могучему средству \vspace
Я согласен с тем, что vspace это очень приятная возможность выудить пару строчек. Но надо понимать, что злоупотреблять этим опасно: всё может поехать и наделать пустот ещё больше.
Попробую написать об этом отдельным параграфом.
С его помощью можно, например, уменьшить размер отступа перед началом новой секции или абзаца
Муторно это очень, и загрязняет код текста.
Да массу полезных вещей можно сделать.
Огрести можно тоже массу :-) Я вот любил засовывать vspace во wrapfigure, а потом приходилось вылавливать эти фигуры отовсюду. Когда латеху сносило башню, он угонял картинки под самый топ страницы. Так что vspace может принести много неприятностей.
Для компактного itemize и иже с ним лучше использовать
\usepackage{paralist}
с его compactenum и compactitem.
А для того, чтобы ссылаться на footnote, можно использовать обычные \label и \footnotemark. Вот здесь это обсуждается с подробностями
http://tex.stackexchange.com/questions/35043/reference-different-places-to-the-same-footnote
Да, а за идею сократить интервалы между словами - спасибо. Мне такое в голову не приходило, хотя часто приходится извращаться по поводу "компактификации".
Кстати, если нет четких указаний по поводу шрифта, то использование txfonts вместо обычного Computer Modern приводит к некоторой экономии места.
Спасибо за wrapfigure c {R}, уже намучался :)
@amorua комментирует...
Для компактного itemize и иже с ним лучше использовать
Во многих журналах используются древние версии теха, там за каждый включённый юзпэкэдж бьют по голове :-)
Но за ссылку спасибо.
А для того, чтобы ссылаться на footnote, можно использовать обычные \label и \footnotemark.
Не знал. Благодарствую!
Да, а за идею сократить интервалы между словами - спасибо.
Пожалуйста! Хотя это выглядит несколько криво и с головой выдаёт намерения втиснуть безбожно много текста, иногда проходит на ура.
Кстати, если нет четких указаний по поводу шрифта
Они обычно таки есть :-(
то использование txfonts вместо обычного Computer Modern приводит к некоторой экономии места.
Занятно. Попробуем.
@Klurik комментирует...
Спасибо за wrapfigure c {R}, уже намучался :)
Ю ар вэлком :-) Не самая очевидная опция, кстати. Но помогает поместить рисунок там, где надо, а не где считает латех :-)
> прибегнуть к ломовым методам грубой силы типа изменение междустрочного интервала и сужение полей до непристойных размеров.
«… вроде изменения … и сужения …»
> Изменение размера между строк
Между строками не размер, а расстояние.
> размер отступа между строками
Здесь слово «размер» вообще не нужно.
> пакет setspace
«setspace» не подсвечено. virens, CSS ждёт тебя!
> \onehalfspacing
> \doublespacing
Код не в рамочке. Или так и задумано?
> большей единицы
Ты хотел написать «значение больше единицы», я уверен в этом :)
> можно сузить отступы списков
Тавтология со списками. Здесь можно просто удалить слово. И рамочка для кода после этих слов какая-то другая.
> A this is customized
Особый, австралийский английский? :)
> В последнем случае пункты идут намного ближе.
Это примечание специально для тех, что читает блог из elinks и не видит картинок?
> Да, сноски - наши большие друзья в плане поместить туда текст, так как сноски, как правило, оформляются шрифтом меньшего размера. На сноски можно ссылаться, особенно если текст оттуда упоминается где-то ещё.
Многословно и запутанно. Я бы переписал так: «Да, сноски — наши большие друзья, так как они оформляются шрифтом меньшего размера».
> с помощью команд
«Команды».
> \fontdimen2
А почему 2 не подсвечено? И в коде ниже тоже… И почему ты внезапно перешёл на синий вместо коричневого?
> и задавая различные параметры для него.
Команда — она, так что «для неё». Вообще я бы «и» заменил на запятую, а то предложение довольно длинное и на одном дыхании точно не читается.
> Для генерации использован пакет \usepackage{lipsum} генерящий искажённый отрывок из философского трактата Цицерона «О пределах добра и зла».
Во-первых, за трактат Цицерона все уже знают — ты в начале поста говорил. Во-вторых, код опять подсвечен синим!
> Подсвеченные параметры означают:
Что-то ты с этим списком намудрил: каждый пункт в каком-то окружении, мешающем чтению. Первый пункт так вообще не дописан.
> в относительных единицах от ширины линии
«Относительно ширины строки».
> то это даст больше свободы ЛаТеХу.
Мне кажется, стоит поменять порядок слов: «даст ЛаТеХу больше свободы».
> Другой возможностью является добавление или удаления
«Удаление».
> и данном примере \vspace{-5ex} мы заставляем ЛаТеХ сместить картинку немного вверх, чтобы выиграть место для текста.
В этом месте лучше сделать отдельное предложение.
> Можно ув.тов. Главного Редактора попросить глянуть на текст орлиным взором ещё разик?
Ты меня по e-mail тыкай, если я долго не отвечаю. В этот раз, к примеру, забыл подписаться на комментарии…
Кстати, ты свои ящики проверяешь? Я тебе ещё в конце прошлого месяца на yandex кое-что отправлял, и что-то ни ответа, ни привета :(
@Minoru комментирует...
«setspace» не подсвечено. virens, CSS ждёт тебя!
На самом деле я публикацию этого поста прозевал: у меня их было два, один черновик и один более-менее дописанный. Поставил их scheduled posts и думал - поправлю. А один из них уже запостился...
Код не в рамочке. Или так и задумано?
Так вышло :-) Исправил.
Ты хотел написать «значение больше единицы», я уверен в этом :)
Да ты провидец! Можешь начинать делать предсказания, кстати: virens в следующем посте выложит баян давностью в полгода, сделав 132 орфографические ошибки :-)
Открывай казино или ипподром - типа тараканьих бегов, ставки, всё в реальном времени. На hakyl, markdown и джаваскриптах с CSS :-)
Особый, австралийский английский? :)
Их бин шпрехен них ин уан пиэм эт найт, фор выч ай ду аполоджайз. :-)
Многословно и запутанно. Я бы переписал так: «Да, сноски — наши большие друзья, так как они оформляются шрифтом меньшего размера».
Так лучше. Принято.
И почему ты внезапно перешёл на синий вместо коричневого?
На момент написания поста я использовал Kate из KDE4, где функцию File -> Export to HTML убрали нахрен. В KDE3 она есть. Поэтому и подсветка другая.
Сейчас я ухитрился восстановить все приложения из KDE3 и переделал раскраску.
трактат Цицерона все уже знают
Я не знал. Убрал второй раз Цицерона.
каждый пункт в каком-то окружении, мешающем чтению.
Убрал.
Первый пункт так вообще не дописан.
Хмм... да. Исправил.
Мне кажется, стоит поменять порядок слов: «даст ЛаТеХу больше свободы».
Согласен.
В этом месте лучше сделать отдельное предложение.
Ты прав, как всегда.
Ты меня по e-mail тыкай, если я долго не отвечаю. В этот раз, к примеру, забыл подписаться на комментарии…
Ладно. Я просто не ожидал, что этот пост появится :-)
Кстати, ты свои ящики проверяешь?
Конечно. Только на gmail. Я тебе отписался на почту.
А как сделать автоперенос формул на новую строку, в том числе при таком маленьком шрифте? Не нашёл ни одной нормальной статьи в интернете.
@Андрей Сухарев комментирует…
А как сделать автоперенос формул на новую строку
В сборнике пакетов mh для LaTeX есть пакет breqn, производящий «Automatic line breaking of displayed equations». Никогда, правда, к нему не прибегал — достачно было окружения multiline, поэтому очень хотелось бы услышать ваше мнение о нём, если будете использовать.
хочу просто сказать спасибо. Блог много раз выручал.
Подскажите пожалуйста, как изменить расстояние между пунктами в списке литературы?
В некоторых случаях LaTeX порывается бороться с висячими строками. Это выливается в то, что текст "не доходит" до конца страницы. Занять всё пространство можно отключив штрафы за оставление висячих строк:
\clubpenalty=0
\widowpenalty=0
Отправить комментарий