Масштабирование графики в tex4ht

Масштабирование графики в tex4ht

Когда я представляю графику с помощью \includegraphics[width=0.5\textwidth]{fig}, tex4ht обрабатывает ее в некоторое количество пикселей (я не уверен, как — вероятно, есть настройка ppi, с которой я не сталкивался?) и выдает, например <img src="..." width="276" height="276">, но для меня естественным было бы, скажем, <img src="..." style="width: 50%;">.

Ранее уже был подобный вопрос — вэтот ответ, michal.h21 приводит пример, где эти значения ширины отображаются как «276pt» (или что-то подобное), но
(1) я не вижу этого при компиляции теста — я вижу только числа, которые, как я понимаю, должны быть в пикселях — хотя, конечно, ответ был получен 6 лет назад;
(2) это в любом случае не является допустимым HTML; и
(3) ни значения px, ни pt не масштабируются вместе с областью просмотра (или, что, возможно, более уместно, со стилизованным размером окружающей фигуры).

Это подводит меня к вопросу: есть ли способ напрямую использовать относительные размеры изображений с помощью tex4ht?

решение1

Редактировать: Код ниже теперь встроен в исходники TeX4ht, вы можете потребовать его, используя опцию Gin-percent. Хотя включение в TeX Live может занять некоторое время.

Этот связанный ответ действительно старый и устарел. Вы можете использовать \Configure{Gin-dim}команду, чтобы изменить способ расчета размеров изображения сейчас. По умолчанию TeX4ht полагается на информацию о размерах изображения, предоставленную пакетом Graphics. Поэтому, если вы используете явные размеры (например, width=0.5\textwidth), используется фактический размер, рассчитанный TeX.

Одна из проблем заключается в том, что если вы зададите только одно измерение, например, ширину, то другое измерение будет установлено на то же значение. Обычно вам это не нужно, если только ваше изображение не квадратное. Чтобы получить правильное значение для всех измерений, Graphics использует .xbbфайл для изображения. Его можно создать с помощью следующей команды:

ebb -x *.jpg

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

Теперь, к вашему фактическому вопросу. Благодаря проекту LaTeX 3 мы теперь можем использовать пакет l3fpдля расчета размеров изображения в процентах. Он гораздо проще в использовании, чем \dimexprкоманда, которая имеет много ограничений.

Попробуйте следующий .cfgфайл:

\Preamble{xhtml}
\makeatletter
\ExplSyntaxOn
\Configure{Gin-dim}{style="width:\fp_eval:n{round(\Gin@req@width/\textwidth*100,2)}\char_generate:nn { `\% } { 12 }"}
\ExplSyntaxOff
\makeatother
\begin{document}
\EndPreamble

В этой конфигурации мы делим ширину изображения, предоставленную Graphics, на ширину текста. Затем это умножается для получения правильного процентного значения.

Для этого файла-образца:

% https://tex.stackexchange.com/q/563276/2891
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.5\textwidth]{example-image.png}
\end{document}

Вы получите этот HTML-код:

<p class='noindent'><img style='width:50%' alt='PIC' src='example-image.png' /> </p> 

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