7

組織モードを使用して Web ページを公開しようとしています。2 つの質問:

  1. base-directoryの組織モード ファイルと の html ファイルを「同期」する方法はありますpublishing-directoryか? 具体的には、 内の org ファイルを削除すると、html ディレクトリ内の対応するファイルも削除base-directoryできますか?org-publish-html
  2. .cssサブディレクトリ内にページがある場合、スタイル シートに使用するルート ディレクトリ内の単一のファイルを指定するにはどうすればよいですか? たとえば、私のディレクトリ構造は次のとおりです。

    public_html/

    • css/
      • マイスタイル.css
    • index.html
    • サブディレクトリ/
      • index.html

次の仕様でorg-publish-project-alist(これは単なるサブセットです) --

:publishing-directory "public_html"
:style "<link rel=\"stylesheet\" href=\"css/mystyle.css\" type=\"text/css\"/>"

mystyle.cssによって使用されますが、によっては使用されpublic_html/index.htmlませんpublic_html/subdir/index.html。これに対する簡単な解決策はありますか (サブディレクトリ内の両方/すべてのファイルでスタイル シートを使用する必要があります)。

どうもありがとう〜

4

1 に答える 1

5
  1. これを行う簡単な方法はありません。 Org-mode公開先の場所については知りません (または気にしません)。そこに物を送信し、正しいディレクトリ構造が存在することを確認するだけです。ファイルが発行された場所にプッシュされた後に呼び出される発行プロセスにフックがあります。これは、 で:completion-functionプロパティを設定することによって制御されますorg-publish-project-alist。このフックを使用して、サブディレクトリ内の * .orgファイルをbase-dir付随する * .html公開ファイルと比較する関数を記述し、付随する * .orgファイルを持たない* .htmlファイルを削除できます。

    これは、必要なファイルを削除するシェル スクリプトを Lispcompletion-functionで呼び出すことによって、最も簡単に達成できると思います。:include:exclude、またはプロパティで何か凝ったことをしている場合は、 から適切な情報を取得して、それらをシェル スクリプトに渡し :base-extensionたいと思うでしょう。この組織モード ページには、 のプロパティ値を取得する方法を示す例があります。次に、それらをシェル スクリプトに渡す必要があります。completion-functionplistcompletion-functionorg-publish-project-alist

  2. これを行うにはいくつかの方法があります。おそらく最も簡単なのは、次のような行で各ファイルのデフォルトのスタイル シートをオーバーライドすることです。

    #+STYLE: <link rel="stylesheet" type="text/css" href="../stylesheet.css" />

    ../サブディレクトリ ファイルの最初のレベルについては、ディレクトリ構造が深くなるにつれて 追加を続けます。

    もう 1 つの可能性は、ディレクトリ ツリー内の 各レベルの汎用テンプレート ファイルを生成することです。この組織モードのページは、これを設定する方法の良い例を示しています。

    最後に、 の:preparation-functionプロパティを使用しorg-publish-project-alistて、各ファイルのスタイル ファイルを自動的に変更する関数を定義することもできます。繰り返しますが、これはおそらく、Lisppreparation-functionにシェル スクリプトを呼び出してファイルを解析させることによって行うのが最適です。sedUnixプログラムでこれを実行して、 のような正規表現を検索し、の間のものをディレクトリ ツリー内の適切なレベルにhref="@MYLOC@/stylesheet.css" />置き換えることを想像できます。@他のオプションを考えると、これはやり過ぎのように思えます。

于 2012-02-26T18:06:59.867 に答える