Каким образом TeX (LaTeX?) центрирует изображения на странице?

Каким образом TeX (LaTeX?) центрирует изображения на странице?

Я заметил, что если я пытаюсь центрировать изображение, которое выходит за пределы страницы, TeX/LaTeX, похоже, сдается и просто выравнивает изображение по левому краю. Почему так?

решение1

Базовый механизм, с помощью которого работает Tex, — это механизм, известный как коробки и клей. Центрирование — не примитивная операция.

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

В LaTeX центрирование (например, буквы X) осуществляется путем нанесения клея с обеих сторон, что эквивалентно \hfilтому, что0pt plus 1fil minus 0pt

Так что в

\hbox to \textwidth{%
\hspace{0pt plus 1fil}X\hspace{0pt plus 1fil}%
}

Запрошенная коробка имеет \textwidthбольшую ширину, Xно меньше указанного размера, поэтому два клеевых элемента расширяются одинаково, заполняя зазор.

Но учтите, что минимальный размер клея с каждой стороны ограничен, 0ptпоэтому если вы замените Xего чем-то более широким, \textwidthкоробка будет переполнена (и будет торчать справа).

Возможны и другие варианты, например, макрос plain Tex \centerlineпохож на приведенный выше, но использует , \hssкоторый имеет бесконечное растяжениеизначения сжатия. что позволяет тексту быть шире, чем textwidth, а клей автоматически предполагает отрицательные значения для компенсации. Это всегда центрирует, но вы не получаете предупреждения о том, что границы текста (или даже границы страницы) были превышены.

решение2

Ответ Дэвидахорошо объясняет механизм центрирования. Если вы хотите узнать один вариант центрирования изображения, шире, чем \textwidth, одна из возможностей — обмануть TeX с помощью блока:

\documentclass[]{article} 
\usepackage{graphicx} 
\usepackage{lipsum} 
\usepackage[margin=3cm,showframe]{geometry} 

\begin{document}

\lipsum[4]
\noindent\makebox[\linewidth]{\includegraphics[scale = 1.3]{example-image-a} }
\lipsum[4]

\end{document}

введите описание изображения здесь

Конечно, лучшим решением будет контролировать ширину изображения, чтобы она не превышала \textwidth:

\includegraphics[width=\textwidth]{example-image}

Связанный контент