LINUX.ORG.RU

LaTeX, figure аномалии с размещением рисунков

 ,


0

1

Приветствую! использую вот такой блок. Всё собирается красиво: крадрат из 4ч изображений. После добавления \usepackage[T2A]{fontenc} изображение поплыло: располагает в горизонтальный ряд на всю страницу. \usepackage[T2A]{fontenc} убрал, но эффект с картинками остался тотже. Что бы потом ни делал, назад в квадрат собрать не получается. Где туплю?

\begin{figure}[H]
\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{cathode_N3_23_clean.png}
	\subcaption[]{\texttt{Os} + плёнка на поверхности}\label{fig:02a}
\end{minipage}

\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{cathode_N3_21_clean.png}
	\subcaption[]{\texttt{Os} + плёнка на поверхности (укрупнённое)}\label{fig:02b}
\end{minipage}

\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{N0_clear_b_marker.png}
	\subcaption[]{Частицы \texttt{Os} на поверхности}\label{fig:02c}
\end{minipage}

\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{N0_clear_a_marker.png}
	\subcaption[]{Частицы \texttt{Os} на поверхности (укрупнённое)}\label{fig:02d}
\end{minipage}

	\caption{Фото поверхности образца}
	\label{fig:02}
\end{figure}

Может вертикально? У тебя четыре параграфа и в каждом по одному боксу. Сделай два параграфа и будет тебе счастье.

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

Конечно вертикально!

Вот такой расклад ситуации не меняет.

\begin{figure}[H]
\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{cathode_N3_23_clean.png}
	\subcaption[]{\texttt{Os} + плёнка графена на поверхности}\label{fig:02a}
	\includegraphics[width=\textwidth]{cathode_N3_21_clean.png}
	\subcaption[]{\texttt{Os} + плёнка графена на поверхности (укрупнённое)}\label{fig:02b}
\end{minipage}

\begin{minipage}[b]{0.49\textwidth}
	\includegraphics[width=\textwidth]{N0_clear_b_marker.png}
	\subcaption[]{Частицы \texttt{Os} на поверхности}\label{fig:02c}

	\includegraphics[width=\textwidth]{N0_clear_a_marker.png}
	\subcaption[]{Частицы \texttt{Os} на поверхности (укрупнённое)}\label{fig:02d}
\end{minipage}

	\caption{Фото поверхности образца}
	\label{fig:02}
\end{figure}
arbyz ()

Попробуй удалить все промежуточные файлы и перекомпилить документ. У меня иногда такое бывало. Удаление помогало.

TalkingMudcrab ()
Ответ на: комментарий от TalkingMudcrab

Перывм делом после того как рисунок «поплыл». Откатился назад. Почистил папку. Скомпилял заново. Не помогло.

arbyz ()
Ответ на: комментарий от arbyz

А если уменьшить {0.49\textwidth} до 0.4?

Делай как говорит Evgueni. У тебя четыре абзаца в каждом по квадрату (minipage) с шириной в полстроки.

Еше можно добавить растягиватель \hfill вместо пустой строки, после первого и третьего квадрата minipage.

einhander ★★★★★ ()
Последнее исправление: einhander (всего исправлений: 2)
Ответ на: комментарий от arbyz

Само собой. Ты в один бокс запихал два объекта шириной в него.

Я то намекал, что просто пустую строку нужно убрать между первой и второй minipage и 3-4ой соответственно.

Параграф — это то, что от одной пустой строки, до другой.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)

Как Евгений предложил. Убрать пустую строку между первой и второй и между третьей и четвертой minipage, чтобы выстроить их по горизонтали. Ну и от себя [b] заменим на [t], чтобы поровнее выглядело. Работает:

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{graphicx}
\usepackage{float}
\usepackage{subcaption}
\begin{document}
\begin{figure}[H]
\begin{minipage}[t]{0.49\textwidth}
	\includegraphics[width=\textwidth]{example-image}
	\subcaption[]{\texttt{Os} + плёнка на поверхности}\label{fig:02a}
\end{minipage}
\begin{minipage}[t]{0.49\textwidth}
	\includegraphics[width=\textwidth]{example-image}
	\subcaption[]{\texttt{Os} + плёнка на поверхности (укрупнённое)}\label{fig:02b}
\end{minipage}

\begin{minipage}[t]{0.49\textwidth}
	\includegraphics[width=\textwidth]{example-image}
	\subcaption[]{Частицы \texttt{Os} на поверхности}\label{fig:02c}
\end{minipage}
\begin{minipage}[t]{0.49\textwidth}
	\includegraphics[width=\textwidth]{example-image}
	\subcaption[]{Частицы \texttt{Os} на поверхности (укрупнённое)}\label{fig:02d}
\end{minipage}
\caption{Фото поверхности образца}
\label{fig:02}
\end{figure}
\end{document}
TeopeTuK ★★★★ ()

Всякие там сеточки проще и надёжнее делать таблицами с невидимыми границами. Это ж не веб, тут за неотзывчивую вёрстку ногами не бьют.

mertvoprog ()
Ответ на: комментарий от Evgueni

Ложные друзья переводчика? :3 По-русски это — абзац. Параграф — какой-то там уровень иерархии разделов (5-й, кажется), у которого заголовки без нумерации высших уровней отображаются и в ToC лезть не хотят даже с высоким tocdepth.

mertvoprog ()
Ответ на: комментарий от mertvoprog

Да. Оговорился. Везде выше имелся в виду абзац.

Evgueni ★★★★★ ()
Ответ на: комментарий от mertvoprog

Вы так говорите, будто бы это плохо... И вообще-то это не Эдик, а Кнут сказал.

А по делу ложная дихотомия таки. Если можно что-то не делать, то лучше этого не делать.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от mertvoprog

Не очень понимаю как сеточка поможет тебе в ровном выводе лучше чем то, что предложено. А вот то, что эта структура тут лишняя и загрязняет код — это точно. TeX — это бокс + клей и их оптимизация. Всё.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Как минимум 0.49 — это уже лютый костыль, который в общем случае может разъехаться. Длины нужно высчитывать (либо \dimexpr, либо \usepackage{calc}). Что само по себе уже требует относительно глубокого знания LaTeX (где какие длины есть и как фигурируют). Убирание отступов в таблицах же хорошо задокументировано даже в совсем нубских гайдах, и толщину границ отнимать в данном случае не нужно.

При различиях в размерах изображений, количестве строк в подписи — начнёт скакать. Впрочем, таблицы от этого тоже не застрахуют, но там хотя бы ячейки «из коробки» в независимых боксах, что упрощает выравнивание.

mertvoprog ()
Ответ на: комментарий от mertvoprog

0.49\textwidth тебе в любом случае нужно будет выставить для размера картинки, что и было сделано. Зачем что-то высчитывать, когда это можно сделать в уме (отнять от 50 один) ­-- не понятно. Так что мимо.

Таблица в этом случае — это лишняя сущность приводящая к ненужному разбуханию кода и не дающая никаких преимуществ. КО

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

0.49\textwidth тебе в любом случае нужно будет выставить для размера картинки

Нет, размер картинки должен соответствовать размеру бокса. В простом случае достаточно только картинке размер и выставить. Но если всё же нужно явно задать размер окружающего бокса относительно размера картинки, то нужно сохранить картинку в бокс, измерить его, положить размер в переменную — и использовать его, а не хардкодить какие-то высчитанные в уме циферки.

Зачем что-то высчитывать, когда это можно сделать в уме (отнять от 50 один) ­– не понятно

В вебе за такое бьют по рукам уже лет 10. Какой один, почему один?! Отступы, которые этим костылём в виде 1% от ширины страницы обходятся, никоим образом от 1% ширины страницы не зависят. Они могут быть меньше (и тогда получится кривоватая вёрстка), могут быть больше (и тогда придётся вместо 1% хардкодить 2%, 1.5% или чего там ещё костылестроителю в голову взбрендит — причём во всех местах, где это нахардкожено, ведь Вы даже сохранить это в макрос не предлагаете).

mertvoprog ()
Ответ на: комментарий от mertvoprog

Нет, размер картинки должен соответствовать размеру бокса.

Так и есть. \textwidth внутри minipage — это размер этой самой minipage.

В вебе за такое бьют по рукам уже лет 10.

Вебмакаки что с них взять... То была гипербола без желания кого-либо обидеть. Думать головой и делать разумные предположения никто пока никому вроде не запрещал. Я не вижу причин этого не делать, в смысле думать.

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

\textwidth внутри minipage — это размер этой самой minipage

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

Вебмакаки что с них взять…

Как раз макаки такие костыли с процентами и делали. Ещё в те времена, когда существовали HTML/CSS-верстальщики как отдельная профессия. Потом в веб начали перекатываться толковые программисты и начали вылизывать его сверху донизу (чем расплодили ещё больше макак, ага — но уже других).

Что характерно, многие и TeX пытаются использовать как язык разметки. При том, что в отличие от вебни, где есть разделение на декларативную разметку и исполняемые программы — любой TeX-файл является компилируемой программой на тьюринг-полном языке. И отношение к нему как к языку разметки, а не языку программирования — ничего хорошего не сулит.

Я не вижу причин этого не делать, в смысле думать

Думание приводит к изобретению велосипедов. Поэтому много думать вредно.

mertvoprog ()
Последнее исправление: mertvoprog (всего исправлений: 1)
Ответ на: комментарий от mertvoprog

Если картинка будет больше minipage

не будет. На колу мочало, начинай всё сначала

Поэтому много думать вредно.

Тренд, такой тренд. Я фигею.

Evgueni ★★★★★ ()
Ответ на: комментарий от mertvoprog

Если что, латех сейчас в такое Г скатился с этими портянками, что зачастую проще самому макрос набросать, чем в 100500-страничной документации к очередному пакету разбираться!

// Eddy_Em

anonymous ()
Ответ на: комментарий от anonymous

А изначально он таким не был? ;) Или просто был сырым и недоделанным, отчего и портянки меньше?

С 3-м как раз проще стало, хоть патчить эти портянки можно, а не переопределять полностью. Хотя ещё проще не переопределять, а заменять своими макрухами, плодя зоопарк, мда…

mertvoprog ()
Ответ на: комментарий от mertvoprog

Изначально было минимальное количество пакетов. И все было кошерненько. А сейчас откроешь чужой исходник и диву даешься, как ради пары фигнюшек, которые можно было от силы десятком строк теховского кода реализовать самому, мудак тянет 100500 левых пакетов!

Нужно стараться писать на голом техе, с минимумом латеховских уродств.

anonymous ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей