make4ht - предоставляет несколько файлов конфигурации

make4ht - предоставляет несколько файлов конфигурации

В постеКак переопределить 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, вот он:мой образец

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