Китайский Android-смартфон THL W5: приятный сюрприз по вменяемой цене



33 коммент.
Некоторое время назад я писал о том, как завёл себе Андроида - гигантскую электроовцу под названием HTC Desire HD. Время шло, смартфон был в активном использовании, несмотря на (частично) алюминиевый корпус, постоянные сжатия от тесного чехла HTC не понравились, и через некоторое время накрылся экран. По гарантии смартфон был отправлен обратно (+ почтовые расходы), но после ремонта через некоторое время экран стал отходить от корпуса. В общем, надо искать замену - пока смартфон жив. И тут автор этих строк заметил, что китайцы из компании THL для внутреннего узкоглазого рынка клепают вполне себе неплохие агрегаты...

HTC, THL и другие китайские балалайки

Компания THL расшифровывается как Technology, Happy Life, и представляет собой лавку дядюшки Ляо, разросшуюся до размеров нескольких десятков магазинов с фабрикой по поклёпу смартфонов. Как и вся продукция из Китая, она чем-то напоминает что-то, что уже кем-то сделано. В случае с THL их смартфоны, сделанные по сходному дизайну, чем-то напоминают продукцию HTC (а конкретно HTC One X) и Samsung, которая, в свою очередь, сильно напоминает продукцию Apple.
Работая в интернациональном коллективе, невольно замечаешь особенности конкретных наций в деле инженерии. Конкретно у китайцев всё очень здорово, когда нужно выдать большой объём работ при точно известной схеме. То есть, например, задача genome sequencing для них - идеальна: схема есть, оборудование есть, и просто нужна толпа квалифицированных исполнителей. Всё становится намного хуже, когда нужно придумать что-то новое, особенно если до этого народ приходил к выводу, что так сделать нельзя. Один китаец меня как-то спросил: какой метод для создания новых вещей? Как ты придумываешь новое? Он искренне думал, что я сейчас ему дам книжку, в которой это написано. Я же честно ему ответил: рву на жопе волосы :-) Он после этого меня больше ни о чём не спрашивал, хотя я ответил ему предельно честно.
Почти весь модельный ряд THL построен на базе одной и той же платформы (SoC, System on Chip) MTK6577, в которую они вставляют разные экраны и батарейки. Так как THL, что называется, "без роду и племени", то денег за свои балалайки смартфоны они просят немного (в отличие от оборзевшего самсунга), собирают пристойно, заливают туда стоковый Андроид и продают всем страждущим.

Душа горит огнём желаний

Собственно, автору этих строк хотелось получить за вменяемые (до 300 долларов) деньги смартфон вида:
  • большой и яркий экран с диагональю больше 3" но меньше 5" и плотностью точек не менее 250 PPI;
  • естественно Android (версия не важна, но ICS хотелось бы);
  • Много памяти (1 Гб);
  • SD-карта памяти - без неё смартфон вообще не рассматривается;
  • приличное качество сборки (пластиковые игрушки от самсунга со скрипами идут лесом);
  • Могучая батарейка.
Удивительно, что таким простым требованиям удовлетворяет не так уж много аппаратов. Более того, намечается тенденция по обезьянничанию Apple: убирание SD-карт, блокирование загрузчика и прочее.

THL W5 3G Smart Phone MTK6577 1GB RAM Dual Core Android 4.0 4.7" IPS Screen

Долго ли, коротко, но я набрёл на смартфон вот с таким длинным названием. По размерам он почти такой же, как мой старый HTC Desire HD, только длиннее за счёт большего экрана (всё-таки 4.7 дюйма). Вот он, наш герой:


Хотя он сделан весь из пластика, выглядит строго и достойно. Более того, за свои 200 долларов под капотом имеется весьма достойное железо, а именно:
  • CPU: Dual Core Cortex A9;
  • GPU: PowerVR Series5 SGX (MT6577);
  • Memory:
    • RAM: 1 GB
    • ROM : 4GB that is 1GB for system, 820MB APPS, 2GB storage space
  • SD-cards: up to 64GB Class 12 Micro SD Memory Card
  • Size:136 x 69.8 x 10.3mm
  • Weight: 157g with battery
  • Screen: 4.7" IPS, 1280x720 Capacitive Multi Touch Screen
  • Network: Dual Sim
    • 2G:GSM/GPRS/EDGE: 850/900/1800/1900 MHz
    • 3G:WCDMA/HSPA/HSPA+: 850/2100MHz
  • GPS: Built In GPS A.GPS
  • Wi-Fi : IEEE 802.11 b/g/n, supports Wi-Fi hotspot
  • Camera:
    • Back: 8.0 mega pixel,
    • Front: 2.0 mega pixel, supports Skype Video Calls
  • Sensor: Gravity Sensor, Proximity Sensor, Light Sensor
Всё это под управлением Android V4.0.4 Ice Cream Sandwich. Среди всего прочего, особо радует IPS-экран, камера и, конечно же фирменный знак китайцев - две сим-карты.


Покупалось это чудо на Ebay вот тут за 209 долларов вместе с доставкой.


В комплект добрые китайцы положили, помимо телефона, наушники, USB-кабель, зарядник, плёнку для экрана и аж целых две (2!) могучие 2000 mAh батарейки. Да, так же в комплекте замечена инструкция для простых китайских колхозников на таком простом и понятном китайском же языке:

Смартфон долетел из Гонк-Конга в Австралию за 8 дней в целости и сохранности:


и далее начал радовать автора этих строк неимоверно, о чём ниже.



Внешний вид, комплект и сборка THL W5

На фотографиях THL W5 выглядит очень прилично, но каков он в жизни? А в жизни он выглядит не менее достойно: несмотря на полностью пластиковый корпус, выглядит строго, собран хорошо и в широкой руке автора лежит отлично. Задняя крышка сделана из мягкого и "шелковистого" на ощупь пластика, скрывая под собой здоровенный танковый аккумулятор, доступ к microSD и SIM-картам.



Собственно, кнопок и штекеров минимум: вкл\выкл, стандартное гнездо наушников на 3.5", кнопка громкости, microUSB, камера сзади (с дистрофичной подсветкой) дырка для микрофона снизу.

Крышка

Крышка держится на десятке небольших защёлок, которые легко поддаются при применении небольшой, но грубой физической силы. Тут вылезает первый небольшой недостаток: microSD карта расположена так, что без изъятия аккумулятора её не достать. Не то, чтобы это часто требовалось, но тем не менее.

Крышка после закрытия плотно прилегает к корпусу, и единственное, что её выдаёт - небольшая выемка в нижней части корпуса, которая позволяет эту самую крышку найти и открыть. Скрипов и люфтов не замечено, смартфон радует на удивление качественной сборкой.

Кнопка включения - в верхней части, в центре. Если обхватить смартфон и положить указательный палец на верхнюю часть, он точно приземлится на кнопку включения. Чуть левее притаился Audio Jack 3.5" выход на наушники.

Наушники

Да, наушники идут в комплекте, но, признаться, лучше бы не шли. На china-review пишут, что эти затычки а-ля "наушники вакуумного типа с довольно хорошим качеством звука" - с чем автор этих строк категорически не согласен.

Такого кошмара я не слышал уже давно: звук как из бочки, басы отсутствуют как класс, высоких частот нет в принципе. Конечно, "Владимирский централ" в них слушать можно, но, скажем, Боккерини и Моцарта, к которым тяготеет автор, лучше даже не пробовать. Для сравнения, оставшиеся наушники от HTC по сравнению с THLевскими звучат как Hi-End студийная запись.

Но за 200 баксов это можно и простить, благо разъём стандартный и можно воткнуть всё, что угодно.

Железо: что под капотом у THL W5

Как отмечалось выше, под капотом у THL W5 весьма приличное железо, особенно учитывая его цену. Двухядерный процессор, много памяти, приличный WiFi чип и огромный яркий экран - обо всём этом чуть подробнее далее.

Батарейка

Целых два могучих 2000 mA*h кирпичика в комплекте, которые призваны поддерживать жизнь огромного 4.7" яркого экрана, двухядрёного процессора и что-то вечно энергично качающего WiFi чипа.


На тему энергопотребления и времени работы, как всегда, мнения несколько разнятся. Официальных данных на сайте THL нет, но есть восторженные комментарии пользователей под описанием смартфона (которые всегда выставляют 5 звёзд):
The battery life is great. It gets me all the way through the day without having to plug in and that's with very heavy usage - I've been an Android user for years and I've never had a phone that will do that...
или:
The battery exceeds my expectations, getting through a full day is no problem for me using web, email, text, google talk, streaming music via BT, checking weather, reading Kindle, you name it. Average 12 hours or so battery for me with 20% or so remaining at the time I plug it in at night.
То, что это опубликовано на официальном сайте, это, конечно, лучше чем ничего, но отсутствие цифр от производителя несколько смущает.
Охочим до цифр и замеров - их есть у нас:
  • выкрутив яркость до 1% с помощью Elixir2 и запустив pomodroido (экран всегда включён), можно проработать от одного заряда с 9.30 утра до 7 часов вечера, при двух SIM-картах, коротком использовании Wifi для забора почты и немного текстовых сообщений. При этом расход за первые 7 часов - 80%, с 7 до 9 часов заряд уходит с 20% до 4% (как раз успеть добежать до розетки) То есть в районе 10 часов.
  • использование утилит типа ScreenDim Full ощутимо продлевают жизнь батарейки.
Тем не менее, автор с комментаторами в целом согласен: батарейка достойная и её хватает на весь день. Хорошая новость в том, что в чехол можно положить вторую :-)

Две SIM-карты - Про и Контра

Смартфон, как и полагается по древней китайской традиции, имеет две SIM-карты (Dual SIM) и, естественно, не залочен на мерзких капиталистических операторов связи.

Как уже говорилось, у смартфона - две SIM-карты под стандартные SIM (полноразмерные). Здесь нужно ещё немного попенять узкоглазым: места для двух симок очень мало, и слоты очень тугие. Вставка SIM-карты, особенно нижней, это то ещё развлечение - автору этих строк, при всей его инженерной подготовке, потребовалось добрых полчаса, чтобы просунуть обе SIM-карты.
Лирическое отступление. Разного рода проприетарщики обожают изобретать новые несовместимые стандарты, на радость простым пользователям. Нынче появилась тенденция делать не нормальные SIM-карты, которые были ещё до изобретения огня, колеса и электричества, а micro-SIM.


Но Apple не была бы Apple, если бы не выпендрилась со своим форматом NanoSIM. В ихний iPhone 5, видите ли, microSIM не влезают, и давайте уже сделаем новый формат.
Вопреки расхожему мнению о том, что Dual SIM потребляет много энергии, автор не заметил ощутимой разницы между включением двух сим-карт (в комментариях сообщают, что в смартфоне один радиомодуль), одной или Airplane mode: главные потребители батарейки, как и всегда, это экран и WiFi.

Занятно, но вот тут говорят, что в таких Dual SIM смартфонах - два разных GSM-приёмника, которые работают одновременно, мониторя состояние сигнала двух сим-карт. Знающие всё на свете авторитетные Анонимусы приглашаются это прокомментировать.
Работают две SIM-карты параллельно, Оказывается, что нет, на чём можно убедиться на опыте: во время разговора "по одной симке", звоним на вторую и убеждаемся что абонент отсутствует в сети. Тем не менее, можно принимать и отправлять SMS на два номера:


В нашей австралийской глухомани это важно: покрытие сотовой связи неравномерно, и можно пользоваться услугами того оператора, который лучше представлен в данной местности и\или дешевле.

IPS Экран 4.7 дюйма

Он прекрасен - яркий и большой, хорошо смотрится даже в солнечную погоду и под большими углами обзора. При своей внушительной диагонали он вытянут чуть больше, чем HTC Desire HD - то есть он такой же широкий, только длиннее. Отлично смотрится на солнце и не слепнет.



Экран очень чёткий - ну ещё бы, 10 точек на миллиметр - и довольно яркий (хотя не глазовыжигающий, как самсунг). Радуют большие углы обзора и цветопередача.


Здесь следует отметить один момент: на экране видна сетка тачскрина, хотя видна она только на ярких участках изображения. На HTC Desire HD её заметно не было, а здесь её видно. Запишем в недостатки, а то кто-нибудь подумает, что THL заплатила мне мильён юаней за обзор :-)

Забавный момент с регулятором яркости: шагов яркости не так много, и даже на 1%, выведенный с помощью Elixir2, это не похоже. В темноте читать не очень удобно, хотя я нашёл ScreenDim Full, который решает эту проблему (утилита стоит целых 99 центов).

WiFi, GPS, Bluetooth...

и прочий беспроводный ливер вполне достойные: wifi цепляется к домашнему и университетскому роутеру, GPS выдаёт координаты, Bluethooth кидает файлы на планшет и десктоп. Дабы проверить WiFi, автор этих строк, естественно, пошёл на свой бложик:


WiFi чип очень охоч до батарейки, и расположен, судя по нагреву во время работы, недалеко от камеры - в верхней части смартфона. Батарею ест от души, хотя WiFi на моём старом HTC более чувстсвительный, и ловит сильно удалённые WiFi точки, которых THL не видит. В остальном WiFi работает без вопросов и проблем.

GPS работает без проблем, хотя холодный старт занимает ощутимо больше времени, чем на HTC Desire HD. Тем не менее, отлично работает в паре с GPStest и Osmand.

Камера и подсветка

Камер две, фронтальная и задняя, и обе выдают пристойного качества снимки.

Фронтальная камера на 2 мегапикселя для видеозвонков - выдаёт немного засвеченную картинку, хотя вполне приличную.

Задняя камера на 8 мегапикселей тоже радует приличными картинками:

Приличные для телефонной камеры снимки, неплохая цветопередача. Снимает на удивление быстро, и так же шустро работает автофокус.
Подсветка... имеет место быть, и это уже радует. Я не знаю, о чём думали в THL, когда ставили эту пародию на LED-подсветку. Картинка стоит тысячи слов: слева HTC Desire HD, справа THL 5W.


В общем, во мгле ада это лучше, чем вообще ничего, но, как бы это помягче, недостаточно для повседневных нужд. Пожалуй, это самый большой недостаток THL W5, но за 200 баксов чего только не простишь.

Выводы по железу

За 200 долларов железо в смартфоне очень достойное: быстрый двухядерный процессор, много (1 Гб) памяти, Dual SIM, могучая батарейка, яркий и качественный экран, достойная камера и долгое время работы (HTC Desire HD в этом плане тихо покуривает в сторонке). Из недостатков стоит отметить дистрофичную подсветку и нагревающийся при работе WiFi.

Софт: Андроид "Мороженый бутерброд" и как сделать его съедобным

На THL W5 залит Android 4.0.4 ICS с минимумом софта и который при первом включении выглядит вот так:

То есть часы, иконки внизу, аутентичные китайские обои и неубираемая строка поиска от Google. Если общую убогость тем и изкоробочный вид Андроида ещё можно терпеть, то надоедливую строку гуглопоиска, отнимающую целый ряд иконок, терпеть решительно невозможно.

Go Launcher EX

Поэтому было решено установить GO Launcher EX в качестве штатной оболочки. Небольшой напилинг, красноглазинг и подбор тем - и вот что из всего этого получилось в итоге:

Тема Stained Glass, виджет для часов пришлось искать отдельно. По сравнению со стоковым убожеством выглядит отлично и, что самое приятное, конфигурировать можно до посинения.Есть много красивых тем, в том числе платных. На скриншотах выбрана тема Stained Glass (бесплатная). Три скриншота отражают установленные приложения, конфигурацию виджетов Elixir2 и календарик от Go:


Из специфичного софта отмечу Andie Graph (эмулятор TI калькуляторов - мечта любого инженера), G Cloud для переноса настроек и AirDroid для связи со смартфоном по WiFi.

SIM Card management

Это ещё одно специфичное отличие от большинства смартфонов - управление двумя SIM-картами. Выше в разделе про железо уже говорилось, что с THL W5 можно посылать и принимать SMS на оба номера одновременно, при этом в сообщениях они будут отображаться все вместе.

Можно выключать и включать SIM-карты в настройках:

назначив каждой цвет для удобства:

Если же вы захотите отправить SMS-сообщение, то в стандартном виджете можно выбрать, с помощью какого оператора сообщение будет отправлено:

Так что теперь можно рассылать и принимать сообщения с обеих SIM-карт одновременно.

Выводы по софту

После HTC Sense и привычного Android 2.3, новый Android 4.0.3 Ice Cream Sandwich выглядит убого и минималистично, с неубираемой строкой поиска вверху, которая отнимает место, и урезанными настройками. К счастью, в отличие от Apple, на андроиде оставлено большое поле для настройки под себя, и сторонняя оболочка GO Launcher EX исправляет положение. В остальном всё как прежде: перенос настроек, уже купленные приложения из Play Store ставятся на новый аппарат, и вот он уже радует нас всеми возможными и невозможными приложениям.

Заключение

Смартфон THL W5, несмотря на своё безродно-китайское происхождение, более чем стоит своих денег, имея мощное железо, отличный экран и кастомизируемый современный Андроид на борту.

Из недостатков можно назвать чахлую подсветку (неизлечимо), небольшой диапазон регулировки яркости экрана (лечится сторонним приложением), несколько заторможенным GPS приёмником и видимой сеткой тачскрина на экране.

Плюсы-таки перевешивают: замечательный большой экран, мощный процессор, море памяти, две батареи, двуxядерный процессор, отличное качество сборки и андроид, не захламлённый предустановленным мусором. Так держать, THL!

Ссылки

Есть хороший обзор на украинском сайте china-review, откуда автор позаимствовал немного картинок. Краткий обзор на английском здесь.
Читать далее

Закрытие Google Reader: альтернативы и что теперь делать



32 коммент.
Не так давно Google объявил о том, что сервис Google Reader будет закрыт 1 июля 2013 года, а всем до того счастливым пользователям предлагается забрать свои данные из Google Takeout и идти к чёртовой матери. На сохранение своих данных отведено время до Июля и оставлена возможность вытащить свои данные через Google Takeout.

Читать далее

ЛаТеХ для продвинутых: Как контролировать положение плавающих объектов "floats"?



12 коммент.
О плавающих объектах (например, картинках) в ЛаТеХе написано много книжек, статей, блогов, заметок, и т.д. Тем не менее вопросы вроде: "Почему я поставил там [!h], а ЛаТеХ всё равно засунул картинку на последнюю страницу?", — наверняка войдут в горячую десятку любого ЛаТеХ-форума. Причина этого проста: механизм размещения плавающих объектов (floats) довольно сложен и отнюдь неинтуитивен. Его описания же в основном рассчитаны на докторов физ-мат наук, решивших посвятить остаток своей жизни разборкам с ЛаТеХом. В этом посте я попытаюсь коротко осветить вопрос о том, как можно контролировать расположение плавающих объектов (в качестве примера будут использованны рисунки "figure", но все написанное применимо и к другим floats, например, table). Большая часть поста состоит из рецептов и примеров, исходники которых лежат здесь. Тем не менее, начать придется с небольшого кусочка теории. Итак, ...

Немного теории или "почему ЛаТеХ не делает то, что я хочу?"

Никто не сможет объяснить, как ЛаТеХ помещает флоатс (floats), точнее и лучше, чем сам Франк Миттельбах. Однако поскольку сделал он это на вражеском языке, мы позволим себе здесь повторить коротко его разъяснения.
Когда ЛаТеХ натыкается на плавающий объект в tex-файле, он пытается его немедленно разместить на странице. Страница для ЛаТеХа состоит из двух частей: верхней и нижней. Кроме того, флоат можно поместить "прямо здесь". Да-да, вы уже поняли, что речь пойдёт об этих загадочных буковках "h", "t" и "b" в \begin{figure}[htb]. ЛаТеХ делает следующее:
  1. Если в аргументе в квадратных скобках встречается "h", то ЛаТеХ попытается немедленно поместить плавающий объект.
  2. Если это невозможно, по причинам которые будут объяснены ниже, то ЛаТеХ посмотрит есть ли в аргументе "t". Если да, то он попытается поместить картинку в верхнюю область страницы.
  3. Если уж и тут не вышло, то ЛаТеХ поинтересуется, встречается ли буковка "b". Да? Тогда картинка идет вниз, если это возможно.
  4. В случае, если ничего не получилось, картинка будет помещена в очередь. ЛаТеХ будет пытаться разгрузить эту очередь, как только начнется новая страница. И здесь плевать он хотел на [hbt].
  5. Отдельная песня — это аргумент "p". На него ЛаТеХ обращает внимание только, когда он разгружает очередь после начала новой страницы. Если "есть такая буква в этом слове", то этот плавающий объект может быть размещен на странице без текста с одними только флоатс.
Как вы уже поняли, порядок аргументов ЛаТеХу абсолютно параллелен, то есть [hbt] и [tbh] возымеют абсолютно одинаковый эффект! Если аргументы не указаны, то по умолчанию предполагается [tbp]. Можно или нельзя поместить плавающий объект на текущей странице вверху (или внизу,...) определяется исходя из двух критериев:
  1. максимальное количество флоатс: totalnumber, topnumber, bottomnumber. Параметры эти означают... Ну, вы и сами догадались: максимальное количество флоатс на всей странице, в верхней и в нижней части, по умолчанию, 3, 2 и 1.
  2. размер "верха" и "низа" страницы не должен превышать \topfraction и \bottomfraction доли страницы, соответственно (по-умолчанию, 0.7 и 0.3). Кроме того, доля текста должна быть не менее \textfraction (по-умолчанию, 0.2).
К чему это всё? А к тому, что восклицательный знак ! означает, что эти два правила будут проигнорированны.
Если не предполагается полностью игнорировать все эти правила, то можно изменить значения параметров. Например,
01:  \setcounter{totalnumber}{10}
02:  \setcounter{topnumber}{10}
может пригодиться, если в документе много невысоких картинок. А
01:  \renewcommand{\topfraction}{1}
02:  \renewcommand{\textfraction}{0}
разрешит ЛаТеХу поместить высокую картинку на странице со всего парой строк текста.
Помимо вышеупомянутых параметров, при размещении плавающих объектов используются длины
  1. \textfloatsep — расстояние между флоатс (в верхней или нижней части страницы) и текстом (по умолчанию, около 20pt);
  2. \floatsep — вертикальное расстояние между двумя флоатс (около 12pt);
  3. \intextsep — расстояние между флоатс вставленным "прямо здесь" (параметр h) и текстом (около 12pt);
  4. \abovecaptionskip и \belowcaptionskip — расстояние над и под подписью к флоат.
Их можно изменить, например, так
01:  \setlength{\textfloatsep}{10pt plus 1.0pt minus 2.0pt}
02:  \setlength{\floatsep}{5pt plus 1.0pt minus 1.0pt}
03:  \setlength{\intextsep}{5pt plus 1.0pt minus 1.0pt}
чтобы всунуть больше плавающих объектов на одну страницу.

Каковы последствия алгоритма? Прежде всего, [!h] означает вовсе не "здесь и только здесь", а "здесь, если оно поместится". Точно также, как [!htpb] и [pb!th] означают абсолютно одно и то же. То есть порядок символов, в том числе и вослицательного знака, никакой роли не играет.
Всё, выдыхаем... Дальше пойдут рецепты.

Здесь, здесь, здесь и только здесь.

Об этом уже писал в блоге virens, но повторюсь: параметр [H] всунет плавающий объект именно там, где он встречается в tex-файле. Если флоат не помещается, то будет начата новая страница, оставив, как результат, пустое место на предыдыщей. Не стоит использовать этот параметер без особой надобности. Ну, и не забудьте сначала сказать \usepackage{float}.

A вам нужны эти флоатс?

Вообще говоря, если вы хотите поместить картинку и её подпись "прямо здесь", то вовсе необязательно использовать плавающий объект. Команда \captionof{}{} из замечательного пакета caption позволяет снабдить подписью что угодно. Например, вот такой код
01:  {
02:  \centering
03:  \includegraphics{mypicture}
04:  \captionof{figure}{Подпись к картинке}\label{fig:mypic}
05:  }
вставит картинку и снабдит её подписью. Первый аргумент — тип плавающего объекта, в данном случае, figure, но с таким же успехом могло бы быть table, wrapfigure и т.п.

Пример использования \captionof

"А для чего оно нужно?", — спросишь ты, привередливый читатель. А, например, для вот такого:
01:  ...
02:  \usepackage{array,graphicx,caption}
03:  ...
04:  \begin{tabular}{m{0.45\linewidth}m{0.45\linewidth}}
05:       Here just some text text text text text text text 
06:       text text text text text text text text text
07:       text text text text text text text text text 
08:       text text text text text text text text text 
09:       text text text text text text text text text  
10:      &
11:       \centering
12:       \includegraphics{roman.jpg}
13:       \captionof{figure}{Usage of captionof}\label{fig:intab}
14:  \end{tabular}

Конечно, не стоит злоупотреблять \captionof: в вышеупомянутом примере гораздо лучшей альтернативой является wrapfigure. Более адекватным примером использования \captionof является случай, когда картинку и таблицу надо разместить так, чтобы они гарантированно были друг под другом, т.е. в пределах одного плавающего объекта:
01:  \begin{figure}\centering % В одном флоат...
02:    % сначала картинка...
03:    \includegraphics[width=7cm]{fig/roman_b}
04:    \captionof{figure}{Figure part of the float}\label{fig:fig}
05:  \vspace*{3em}
06:    % потом таблица
07:    \begin{tabular}{ccc}
08:      ...
09:    \end{tabular}
10:    \captionof{table}{Table part of the float}\label{fig:table}
11:  \end{figure}

Сложный пример с \captionof

Примечание: Нетерпеливый читатель может пропустить этот пример без ущерба для понимания последующего текста.
Во своей своей красе \captionof предстаёт в случаях, когда надо разместить несколько картинок в пределах одного плавающего объекта, как, например, на рисунке внизу.
Стоит обратить внимание на выравнивание картинок: (b) и (c) занимают по высоте ровно столько места сколько более высокая картинка (а) слева. Код из этого примера приведен ниже:
01:  ...
02:  \usepackage[labelformat=simple]{subcaption}
03:  % метка subfigure: "(а)" вместо дефолтного "а"
04:  \renewcommand\thesubfigure{(\alph{subfigure})} 
05:  \usepackage{graphicx}
06:  ...
07:  
08:  \newsavebox{\leftpic}
09:  
10:  \begin{figure}[t]\centering
11:  % Левая картинка (а) помещена в бокс, чтобы измерить её высоту
12:  \sbox{\leftpic}%
13:  {% Левая картинка (a):
14:   \begin{subfigure}[b]{0.45\linewidth}\centering
15:     \includegraphics[height=7cm]{fig/roman_a1}
16:     \caption{Subfigure A}\label{fig:2a}
17:   \end{subfigure}%
18:  }
19:   %------------------------
20:   % Вывeсти картинку, сохраненную в боксе
21:   \usebox{\leftpic}
22:   \quad % немного пустого места между левой и правой картинками
23:   % Две правые картинки в минипейдж, 
24:   %   - высота которого равна высоте левой картинки: \ht\leftpic
25:   %   - материал будет растянут вертикально: [s] + \vfill 
26:   \begin{minipage}[b][\ht\leftpic][s]{0.45\linewidth}
27:    \begin{center}
28:     \includegraphics[height=2.5cm]{fig/roman_b}
29:     \captionof{subfigure}{Subfigure B}\label{fig:2b}
30:    \end{center}
31:  
32:    \vfill
33:  
34:    \begin{center}
35:     \includegraphics[height=2.5cm]{fig/roman_c}
36:     \captionof{subfigure}{Subfigure C}\label{fig:2c}
37:    \end{center}
38:   \end{minipage}
39:  \caption{Fancy placement of subfigures}
40:  \label{fig:2}
41:  \end{figure}
Здесь используется пакет subcaption, в котором определено окружение subfigure: оно, по-сути, идентично окружению minipage. Усложняющим фактором является то, что высота левой картинки заранее неизвестна. Поэтому картинка (а) сначала помещена в savebox под именем \leftpic при помощи команды \sbox{\leftpic}. Затем, после того как она выведена на печать с помощью \usebox{}, справа создаётся minipage:
01:  \begin{minipage}[b][\ht\leftpic][s]{0.45\linewidth}
высота которой равна высоте левой картинки (а): \ht\leftpic. Обратите внимание на необязательный аргумент [s] (s=stretch) и \vfill между (b) и (c). Благодаря им между (b) и (c) помещается "растягивающийся вертикальный интервал" таким образом, что картинки (b) и (c) полностью занимают всю высоту minipage.
В приведенном примере \captionof незаменим, так как он снабжает рисунки (b) и (c) подписью, причем делает это не абы как, а именно так как подписаны все другие subfigure и к тому же инкрементирует все необходимые счётчики, т.е. нумерация (b) и (c) получается автоматически.
В качестве домашнего задания, попробуйте соорудить вот такие две картинки.

Код для левой картинки:открыть
01:  ...
02:  \usepackage[labelformat=simple]{subcaption}
03:  \renewcommand\thesubfigure{(\alph{subfigure})} % I want (a), not just a
04:  
05:  \usepackage[demo]{graphicx} % опция demo вставляет черные прамоугольники вместо картинок
06:  ...
07:  \begin{figure}[!t]\centering
08:  \setcounter{subfigure}{0}
09:  \addtocounter{figure}{1}
10:  \def\hgt{15cm}
11:  \def\wdt{5cm}
12:   \begin{minipage}[b][\hgt][s]{0.45\linewidth}
13:    \begin{center}
14:     \includegraphics[width=\wdt]{fig/roman_b}
15:     \captionof{subfigure}{Subfigure A}\label{fig:3a}
16:    \end{center}
17:  
18:    \vfill
19:  
20:    \begin{center}
21:     \includegraphics[width=\wdt]{fig/roman_c}
22:     \captionof{subfigure}{Subfigure B}\label{fig:3bb}
23:    \end{center}
24:  
25:     \vfill
26:  
27:    \begin{center}
28:     \includegraphics[width=\wdt]{fig/roman_aa}
29:     \captionof{subfigure}{Subfigure C}\label{fig:3c}
30:    \end{center}
31:   \end{minipage}
32:  %
33:   \quad
34:  %
35:   \begin{minipage}[b][\hgt][s]{0.45\linewidth}
36:    \begin{center}
37:     \includegraphics[angle=90,width=\wdt]{fig/roman_b}
38:     \captionof{subfigure}{Subfigure D}\label{fig:3d}
39:    \end{center}
40:  
41:    \vfill
42:  
43:    \begin{center}
44:     \includegraphics[width=7cm,height=5cm]{fig/roman_c}
45:     \captionof{subfigure}{Subfigure E}\label{fig:3e}
46:    \end{center}
47:   \end{minipage}
48:   \addtocounter{figure}{-1}
49:   \caption{Fancy placement of subfigures}\label{fig:3}
50:  \end{figure}

Код для правой картинки:открыть
01:  ...
02:  \usepackage{caption}
03:  \usepackage[demo]{graphicx} % опция demo вставляет черные прямоугольники вместо картинок
04:  ...
05:  \begin{figure}[!t]\centering
06:  \def\hgt{15cm}
07:  \def\wdt{5cm}
08:   \begin{minipage}[b][\hgt][s]{0.45\linewidth}
09:    \begin{center}
10:     \includegraphics[width=\wdt]{fig/roman_b}
11:     \captionof{figure}{caption x1}\label{fig:x1}
12:    \end{center}
13:  
14:    \vfill
15:  
16:    \begin{center}
17:     \includegraphics[width=\wdt]{fig/roman_c}
18:     \captionof{figure}{caption x2}\label{fig:x2}
19:    \end{center}
20:  
21:     \vfill
22:  
23:    \begin{center}
24:     \includegraphics[width=\wdt]{fig/roman_aa}
25:     \captionof{figure}{caption x3}\label{fig:x3}
26:    \end{center}
27:   \end{minipage}
28:  %
29:   \quad
30:  %
31:   \begin{minipage}[b][\hgt][s]{0.45\linewidth}
32:    \begin{center}
33:     \includegraphics[angle=90,width=\wdt]{fig/roman_b}
34:     \captionof{figure}{caption x4}\label{fig:x4}
35:    \end{center}
36:  
37:    \vfill
38:  
39:    \begin{center}
40:     \includegraphics[width=7cm,height=5cm]{fig/roman_c}
41:     \captionof{figure}{caption x5}\label{fig:x5}
42:    \end{center}
43:   \end{minipage}
44:  %
45:  \end{figure}

Код из этих и всех остальных примеров (в виде полностью готовых к компиляции tex-файлов) можно также найти по этой ссылке: http://tinyurl.com/amorua-floats.

До сюда и ни миллиметром дальше: placeins

Вернёмся, однако, к основной теме: к дополнительным средствам контроля над расположением плавающих объектов. В некоторых ситуациях, нежелательно, чтобы плавающие объекты переносились слишком далеко. Например, нелогично, когда картинка из предыдущего раздела возникает лишь в следующем.
Штатным решением этой проблемы является \clearpage, который принудительно разгружает очередь плавающих объектов и начинает новую страницу. Последнее — новая страница — не всегда приводит к красивому результаты. Зачастую хотелось бы вывести все плавающие объекты без начала новой страницы, если это возможно.
Пакет placeins определяет команду \FloarBarrier, которая решает именно вышеупомянутую проблему. Как только LaТeX встретит \FloatBarrier, он выведет все накопившиеся в очереди флоатс, но при этом не будет без надобности начинать новую страницу.
Зачастую, начало нового раздела \section{} и является той логической границей, которую плавающие объекты не должны пересекать. Можно, конечно, вручную указывать \FloatBarrier перед каждым \section. Однако пакет placeins предоставляет опцию section, которая сделает это автоматически:
01:  \usepackage[section,above,below]{placeins}
Здесь использованы ещё две опции above и below. Они разрешают вывод картинки на той же странице, где начинается новый раздел (над или под названием раздела), хотя картинка относится к предыдущему. В некоторых случаях, \FloatBarrier всё-таки приведет к неприятным разрывам страниц. Типичная ситуация такого рода: флоат не влезает на остаток страницы, а после него сразу идёт \FloatBarrier. Здесь у ЛаТеХа не остаётся выбора и будет начата новая страница. Предотвратить такое поведение можно с помощью команды \afterpage из одноименного пакета
01:  ...
02:  \usepackage{afterpage,placeins}
03:  ...
04:  \begin{figure} % здесь сам флоат
05:    ...
06:  \end{figure}  
07:  
08:  \afterpage{\FloatBarrier} % вставить барьер сразу после
09:                            % начала новой страницы
10:  ...
Эта команда вставляет свой аргумент в TeX-код сразу после начала новой страницы.

Утром деньги — вечером стулья: flafter

Одним из последствий алгоритма, описанного в самом начале этого поста, может быть то, что даже если в tex-файле плавающий объект идет после первой ссылки на него, "на бумаге" он окажется раньше, чем на него первый раз ссылаются. Если этого желательно избежать, то самым простым решением является пакет flafter.
01:  \usepackage{flafter}% помещает флоат ПОСЛЕ первой ссылки на него 
Вот, собственно, и всё!

Да ну их всех взад: endfloat

Многие естественнонаучные журналы требуют, чтобы в манускриптах, посланных им на рецензию, все рисунки были вынесены в самый конец. Пакет endfloat сделает это автоматически: он перенесёт все рисунки в конец документа.
По умолчанию, пакет вставит на место рисунков и таблиц (в основном тексте) заглушки типа "[Figure 5 about here]". Затем, после основного текста, сначала Список рисунков и Список таблиц, а затем и сами рисунки/таблицы, центрированными по одной на странице.
Контролировать поведение пакета можно с помощью параметров, наиболее интересными из которых являются nomarkers, nofiglist и notablist. Например,
01:  \usepackage[nomarkers,nofiglist,notablist]{endfloat}
не будет вставлять заглушки и списки рисунков и таблиц.
Если списки флоатс все-таки нужны, то порядок их вывода контролируется параметром tablesfirst или figuresfirst (включен по умолчанию), которые, выводят первым список таблиц или рисунков, соответственно.

Картинки с продолжением: \ContinuedFloat

Иногда возникает необходимость разместить большое количество логически связанных "подрисунков" (subfigures) в пределах одного рисунка. Однако, ЛаТеХ не поддерживает плавающие объекты размером более одной страницы. Проблема решается командой \ContinuedFloat из уже упомянутого пакета caption. Использование этой команды очевидно из примера ниже:
01:  ...
02:  \usepackage{caption}
03:  \usepackage[labelformat=simple]{subcaption}
04:  \renewcommand\thesubfigure{(\alph{subfigure})} % I want (a), not just a
05:  ...
06:  \begin{figure} % Начало "длинного" рисунка
07:    \begin{subfigure}{0.5\linewidth}  % Первый "подрисунок"
08:       \includegraphics{...}
09:       \caption{...}\label{...}
10:    \end{subfigure}
11:    ... % здесь ещё подрисунки
12:    \begin{subfigure}{0.5\linewidth}  % n-й "подрисунок
13:       \includegraphics{...}
14:       \caption{...}\label{...}
15:    \end{subfigure}
16:    \caption{Мой любимый рисунок}\label{...}
17:  \end{figure} % конец первой части
18:  
19:  \begin{figure} \ContinuedFloat % продолжение рисунка
20:    \begin{subfigure}{0.5\linewidth}  % (n+1)-й "подрисунок"
21:       \includegraphics{...}
22:       \caption{...}\label{...}
23:    \end{subfigure}
24:    ... % здесь ещё подрисунки
25:    \begin{subfigure}{0.5\linewidth}  % последний "подрисунок
26:       \includegraphics{...} 
27:       \caption{...}\label{...}
28:    \end{subfigure}
29:    \caption{Мой любимый рисунок (продолжение)} % \label здесь не нужна!!! 
30:  \end{figure} % конец второй (и последней) части рисунка
Принцип очень прост: делим "длинный рисунок" на несколько частей. Каждую часть помещаем в отдельный плавающий объект (окружение figure). Во всех частях, кроме первой добавляем \ContinuedFloat сразу после \begin{figure}. Эта команда "переставит" все счётчики (для figure и для subfigure) соответствующим образом: figure не изменяется (все части имеют один "номер"), а subfigure продолжится начиная с последней буквы предыдущей части.
Обратите внимание, что к каждой части надо вручную добавить \caption{...}.
Абсолютно то же самое можно проделать для любого типа плавающего объекта, например, для table.

Картинки на развороте: dpfloat

Если два больших флоат-рисунка связаны логически, как, например, в примере из предыдущего раздела, то их желательно разместить так, чтобы читатель мог лицезреть обе части одновременно, то есть на развороте. Это особенно удобно, если текст манускрипта будет напечатан в виде книжки: например, в случае диссертации.
На практике это означает, что первая часть рисунка должна попасть на чётную страницу, а вторая — на нечётную (предполагается, что книжка начинается со страницы 1, у которой нет "разворотной пары"). Сделать это можно с помощью пакета dpfloat. Ограничением является то, что каждая из частей будет занимать полную страницу, на которой не будет текста. А делается это так: надо создать два плавающих объекта, идущих в tex-файле друг за другом. Рисунок внутри первого флоат, который должен оказаться слева, помещается внутрь окружения leftfullpage, а рисунок внутри второго, который предполагается быть на правом развороте, внутрь fullpage. Пример ниже демонстрирует это в подробностях.
01:  ...
02:  \usepackage{dpfloat}
03:  ...
04:  \begin{figure} % первая часть
05:    \begin{leftfullpage} % Эта картинка гарантированно окажется
06:                         % на ЛЕВОМ развороте
07:       % здесь все, что обычно...
08:       % например, \includegraphics{...}
09:    \end{leftfullpage}
10:  \end{figure}
11:  
12:  \begin{figure} % вторая часть
13:    \begin{fullpage} % Эта картинка гарантированно окажется
14:                     % на ПРАВОМ развороте
15:       % здесь все, что обычно...
16:       % например, \includegraphics{...}
17:    \end{fullpage}
18:  \end{figure}

Последний рецепт: одинокие картинки

Несмотря на все продвинутые способы контроля положения плавающих объектов, время от времени возникают ситуации, когда посленяя (или пара последних) картинка остаётся напоследок и оказывается одиноко на самой последней странице. При этом, независимо от параметров вроде [hbt], она будет размещена (вертикально) по центру страницы. Но зачастую желательно разместить картинку вверху страницы, в основном, из эстических соображений. Достичь этого очень просто, поместив следующий код в tex-файл:
01:  \makeatletter
02:  \setlength{\@fptop}{0pt}
03:  \setlength{\@fpbot}{0pt plus 1fil}
04:  \makeatother
Любознательные могут ознакомиться с подробностями вот здесь.

Заключение и выводы

Итак, штатные средства ЛаТеХ позволяют контролировать местоположение плавающих объектов с помощью необязательных аргументов [htbp!] и параметров определяющих максимальное количество таких объектов на странице и её частях. Для более продвинутого контроля можно использовать расширения, содержащиеся в пакетах float, caption, placeins, afterpage, flafter, endfloat и dpfloat. В этом посту мы обсудили наиболее общеупотребительные их аспекты, однако для более подробного описания лучше ознакомиться с оригинальной документацией.
Прибегнув к "тонкой настройке" плавающих объектов, в большинстве случаев можно добиться вполне приемлемых результатов даже при "автоматическом" размещении их ЛаТеХом. Разумеется, при диспропорционально большом количестве рисунков и/или таблиц, скорее всего понадобится ручное вмешательство.
При возникновении конкретных проблем, зачастую быстрее всего получить ответ можно задав вопрос на http://tex.stackexchange.com/.
Исходники (tex-файлы) для всех примеров из данного поста можно найти здесь. Зеркала на случай сбоя: зеркало1, зеркало2
Читать далее