make4ht - 複数の設定ファイルを提供する

make4ht - 複数の設定ファイルを提供する

投稿中単一の .css ファイルで tex4ht の CSS をオーバーライドするにはどうすればよいですか?提案された解決策では、設定ファイル(つまりサンプル.cfg)。だから、もし私がサンプル.tex付け加えるとサンプル.cfg

しかし、私の場合は、追加の設定ファイルを使用しています。マイメディア.cfgドキュメントにいくつかの追加機能を追加します。

これは (正しく理解していれば)、--config myMediaこのファイルをコンパイルに追加するために を使用する必要があることを意味します。

make4ht --utf8 --shell-escape sample.tex --config myMedia

さて、私は設定ファイル:

  • 必要なコマンドをすべて備えたマイメディア
  • CSS設定を含む別のファイル(\CssFile[] \EndCssFile

それで:

  • --config myMedia,sampleまたはのようなものを追加する必要がありますか--config "myMedia,sample"?まあ、それは機能しません...最初の構成ファイルのみが読み込まれます
  • 合併すべきかマイメディア.cfgそしてサンプル.cfg一緒に?見た目は醜いですが、実際には機能します

何か見落としているのでしょうか? コンパイラを変更したほうがよいでしょうか?

答え1

Darios の回答にいくつか追加情報を追加したいと思います。

では 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ドキュメントのプリアンブルを処理するときに、コマンドを再定義してフックを挿入するために、使用されているすべてのパッケージの構成ファイルが読み込まれます。その後、現在の出力形式の構成ファイルが実行されます。は、HTML、ODT、およびその他の出力形式をサポートできます。したがって、HTML の構成はまたはファイルtex4htで提供され、ODT 形式は などで提供されます。もちろん、これらのファイルにカスタム構成を挿入することはできません。編集内容は次の更新で削除されるためです。html4.4hthtml5.4htooffice.4httex4ht

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は、引数として使用されるマークが のオプションとして使用されたときに実行されるコードを宣言しますtex4hthtml5は によって自動的に追加される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

メインの CSS ファイルからのコードは含まれずsamplestyle.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がコメントで提案したことに従いました(本当にありがとう!)。彼の言う通りです。必要なしいずれのマイメディア.cfgそこにあったものは、マイメディア4ht

このソリューションにより、グローバル設定ファイル(サンプル.cfg)を他のパッケージファイル(例えばマイメディア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
    
  • マイメディア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}
    
  • マイメディア
    \ProvidesPackage{myMedia}
    \newcommand\myMedia[1]{#1}
    \endinput
    
  • サンプルスタイル.cssドキュメントの CSS スタイルが含まれます。
    /* css.sty */
    body {
        text-align: justify;
    }
    

コマンドラインは

make4ht --utf8 --shell-escape sample.tex --config sample

MWE が必要な方のために、ここにあります:マイサンプル

関連情報