В постеКак переопределить CSS tex4ht в одном файле .css?предлагаемое решение требует добавления файла конфигурации (а именнообразец.cfg). Итак, если у меня естьобразец.texЯ могу добавитьобразец.cfg.
Однако в моем случае я использую дополнительный файл конфигурации, который называетсяmyMedia.cfgдобавить некоторые дополнительные функции в мой документ.
Это означает (если я правильно понял), что мне следует использовать , --config myMedia
чтобы добавить этот файл в компиляцию.
make4ht --utf8 --shell-escape sample.tex --config myMedia
Теперь я заканчиваю тем, чтодваФайлы конфигурации:
- один со всеми необходимыми командами длямоиМедиа
- еще один файл с конфигурацией CSS (тот, что с
\CssFile[] \EndCssFile
)
Так:
- мне добавить что-то вроде
--config myMedia,sample
или--config "myMedia,sample"
? ну, это не работает... он загружает только первый файл конфигурации - должен ли я объединитьmyMedia.cfgиобразец.cfgвместе? Выглядит ужасно, но на самом деле работает
Я что-то упустил? Мне стоит сменить компилятор?
решение1
Я хотел бы добавить некоторую дополнительную информацию к ответу Дариоса.
Только один файл конфигурации может быть использован командой tex4ht
, но его содержимое может быть включено командой \input
, поэтому возможно повторное использование частей конфигурации между различными проектами. Можно сохранить определенные файлы в локальном каталоге TEXMF, поэтому они будут доступны из любого места на компьютере.
В вашем случае, поскольку вы создали пользовательский пакет, вам нужно создать файл конфигурации для этого пакета, называемый packagename.4ht
. Вы предоставили файл конфигурации для вашего пакета myMedia.4ht
в своем ответе. Я бы немного изменил его:
\NewConfigure{myMedia}{2}%
\renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia}
%\Configure{myMedia}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}
\Hinput{myMedia}
Команда \NewConfigure{myMedia}{2}
создает так называемые хуки, которые можно вставить в переопределенные команды и настроить с помощью \Configure
команды. Она делает то же самое, что и \NewConfigure
из вашего ответа, но немного проще.
Лучше хранить \Configure
команды вне файлов конфигурации пакета. Почему? При tex4ht
обработке преамбулы документа загружаются файлы конфигурации для всех используемых пакетов, чтобы переопределить команды и вставить хуки. После этого выполняются файлы конфигурации для текущего формата вывода. tex4ht
Таким образом, может поддерживать HTML, ODT и некоторые другие форматы вывода. Поэтому конфигурации для HTML предоставляются в файлах html4.4ht
или html5.4ht
, для формата ODT в ooffice.4ht
и т. д. Конечно, вы не сможете вставить свои собственные конфигурации в эти файлы, так как ваши правки будут удалены в следующем tex4ht
обновлении.
Если вы уверены, что поддерживаете только HTML, вы можете сохранить команду \Configure
в myMedia.4ht
, даже если это не оптимальное решение. Другая возможность — поместить ее в .cfg
файл, и последняя — создать собственный формат вывода. Я покажу эту возможность только в образовательных целях:
Форматы вывода определены в tex4ht.4ht
файле. Вот определение html5
формата, например:
\Configure{html5}{%
\:CheckOption{info}\if:Option
\Hinclude[*]{infoht4.4ht}\fi
\:CheckOption{info}\if:Option
\Hinclude[*]{infomml.4ht}\fi
\Hinclude[*]{html4.4ht}%
\Hinclude[*]{unicode.4ht}%
\:CheckOption{mathml}\if:Option%
\else\:CheckOption{mathml-}\fi%
\if:Option%
\Hinclude[*]{mathml.4ht}%
\Hinclude[*]{html-mml.4ht}%
\else
\Hinclude[*]{html4-math.4ht}%
\fi
\:CheckOption{svg}%
\if:Option \else\:CheckOption{svg-}\fi
\if:Option \else\:CheckOption{svg-obj}\fi
\if:Option \else\:CheckOption{svg-inline}\fi
\if:Option \Hinclude[*]{svg-option.4ht}%
\:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
\fi
\Hinclude[*]{html5.4ht}%
}
Команда \Configure
здесь объявляет код, который выполняется, когда метка, используемая в качестве аргумента, используется как опция для tex4ht
. html5
добавляется автоматически, make4ht
поэтому этот код выполняется по умолчанию.
Пользовательский формат вывода может быть определен в tex4ht.usr
файле. Его можно поместить в локальное дерево TEXMF, например, это ~/texmf/tex/latex/tex4ht/tex4ht.usr
кажется работающим. Его содержимое может выглядеть следующим образом:
\Configure{myhtml5}{%
\:CheckOption{info}\if:Option
\Hinclude[*]{infoht4.4ht}\fi
\:CheckOption{info}\if:Option
\Hinclude[*]{infomml.4ht}\fi
\Hinclude[*]{html4.4ht}%
\Hinclude[*]{unicode.4ht}%
\:CheckOption{mathml}\if:Option%
\else\:CheckOption{mathml-}\fi%
\if:Option%
\Hinclude[*]{mathml.4ht}%
\Hinclude[*]{html-mml.4ht}%
\else
\Hinclude[*]{html4-math.4ht}%
\fi
\:CheckOption{svg}%
\if:Option \else\:CheckOption{svg-}\fi
\if:Option \else\:CheckOption{svg-obj}\fi
\if:Option \else\:CheckOption{svg-inline}\fi
\if:Option \Hinclude[*]{svg-option.4ht}%
\:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
\fi
\Hinclude[*]{html5.4ht}%
\Hinclude[*]{myconfig.4ht}
}
Отличие от предыдущего списка в том, что метка названа myhtml5
и запрашивается новый файл, myconfig.4ht
. Чтобы запросить этот формат вывода, запустите
make4ht filename.tex "myhtml5"
Затем пользовательские конфигурации можно добавить в myconfig.4ht
файл, который можно сохранить в том же месте, что и tex4ht.usr
:
\exit:ifnot{myMedia}
\ConfigureHinput{myMedia}
\Configure{myMedia}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}
{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}
\endinput\empty\empty\empty\empty\empty\empty
\endinput
Я использовал шаблон для пакета издокументация tex4ht. В общем случае код пакета должен быть заключен в \ConfigureHinput{packagename} ... \endinput
. Это гарантирует, что он будет выполнен только тогда, когда пакет использовался в документе. В противном случае вы получите предупреждения об отсутствующих конфигурациях и, возможно, нежелательном HTML-коде в документе. Используемые пакеты регистрируются для обработки с помощью команды \Hinput
в файле пакета .4ht
.
Конфигурация для myMedia
была немного изменена, чтобы правильно обрабатывать параграфы. Исходная конфигурация создавала недопустимый HTML-код из-за этой проблемы. Вы можете скопировать команду \Configure
в .cfg
файл или в , myMedia.4ht
если вы решите использовать более простые решения. Это единственное действительно необходимое исправление из моего ответа.
Последняя часть информации, которую я хочу предоставить в своем ответе, заключается в том, что для включения внешнего CSS-файла можно использовать более простую команду:
\Preamble{xhtml}
\begin{document}
\Configure{AddCss}{samplestyle.css}
\EndPreamble
Он не будет включать код из samplestyle.css
основного файла CSS, он просто будет включать ссылку на заголовок HTML. Я думаю, что это предпочтительный способ в большинстве случаев.
Это результат команды
make4ht -um draft -c sample.cfg sample.tex "myhtml5"
<hr class="figure" /><div class="figure"
>
<a id="x1-21"></a>
<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="test.mp4" type="video/mp4"></video></div>
<br /> <div class="caption"
><span class="id">Figure 1: </span><span
class="content">test</span></div><!--tex4ht:label?: x1-21 -->
</div><hr class="endfigure" />
решение2
Хорошо, я просто последовал совету @gusbrs в комментарии ниже (спасибо большое!), и он оказался прав: естьнезачемлюбойmyMedia.cfg. То, что там было, можно было просто переместить вmyMedia.4ht.
Это решение позволяет полностью отделить глобальный файл конфигурации (образец.cfg) из файлов других пакетов (например,myMedia.4ht).
Электрический токработающийнастройка следующая:
образец.texсодержит
\usepackage{myMedia}
команду в преамбуле документа;\documentclass{article} \usepackage{graphicx} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} % may use latin1 instead of utf8 \usepackage[hidelinks]{hyperref} \usepackage{myMedia} \begin{document} \begin{figure} \centering \myMedia{test.mp4} \caption{test} \end{figure} \end{document}
- образец.cfgкоторый действует как настоящий файл конфигурации;
\Preamble{xhtml} \begin{document} \CssFile[samplestyle.css] \EndCssFile \EndPreamble
- myMedia.4ht
\NewConfigure{myMedia}[2]% { \def\a:myMedia{#1}% \def\b:myMedia{#2}% } \renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia} \Configure{myMedia}{\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src=}\NoFonts}{\HCode{ type="video/mp4"></video></div>}\EndNoFonts}
- myMedia.sty
\ProvidesPackage{myMedia} \newcommand\myMedia[1]{#1} \endinput
- образецстиля.cssсодержит CSS-стили для документа;
/* css.sty */ body { text-align: justify; }
Командная строка — это
make4ht --utf8 --shell-escape sample.tex --config sample
Для тех, кому может понадобиться MWE, вот он:мой образец