ただし、機能しないパッケージもあります。などauctex
。
その理由は(use-package tex :ensure t)
動作しませんauctex
ので、あるauctex
名前GNU ELPAパッケージは、(参照(emacs) Packages
)、一方、tex
名称機能(参照(elisp) Named Features
により提供)auctex
のパッケージ。
つまり、パッケージの一部として配布されるtex
単一のファイルに名前を付けます。次の例を検討してください。tex.el
auctex
M-xpp-macroexpand-last-sexp
RET後のポイントで入力
(use-package tex
:ensure t)
沸騰する形を与える
(progn
(use-package-ensure-elpa 'tex '(t) 'nil)
(require 'tex nil t))
同じように
(use-package tex
:ensure auctex)
効果的に拡大する
(progn
(use-package-ensure-elpa 'tex '(auctex) 'nil)
(require 'tex nil t))
これは、NAME
引数use-package
とその:ensure
キーワードの目的の違いを示しています。前者は、どの名前付きフィーチャーが残りのスタンザに関連する/デフォルトに属するかを宣言します。これはとまったく同じ意味with-eval-after-load
です。参照してください(elisp) Hooks for Loading
。
後者は単に関数の二番目の引数を介してインストールすることが指定されたパッケージ(S)を求めuse-package-ensure-elpa
、t
単に電流によりという名前のパッケージを意味しますNAME
。use-package-ensure-elpa
、次に、呼び出しpackage-install
ます。詳細については、を参照してください(emacs) Package Installation
。
このブログ/チュートリアル/サイトによると、理由は
なぜなら、インストールされると、auctexはtexパッケージをオーバーライドするからです。
どういう意味ですか
残念ながら、これは間違いであり、誤解を招くものでもあります。「オーバーライドする」とは、通常、既存の機能を置き換える、またはサルパッチングすることを指します(アドバイスなど)。あるパッケージが別のパッケージと同じ名前の機能を提供し、後者をEmacsロード関数から隠す場合、これは「シャドウイング」と呼ばれます。
AUCTeXディストリビューションは、さまざまな組み込みTeX関連機能をオーバーライドおよび拡張しますが、組み込みライブラリをシャドウしません。これは、の結果を調べることで確認できますM-xlist-load-path-shadows
RET。
より良い権限はuse-package
ドキュメント自体です:https : //github.com/jwiegley/use-package/#package-installation。
他のパッケージに対してそれをいつ行うべきかをどのようにして知ることができますか?
use-package
スタンザをグループ化する方法と、対応するパッケージの名前の両方に依存します。たとえば、組織に関連するすべての設定またはほとんどの設定を1つにまとめ(use-package org ...)
たいorg-plus-contrib
が、組み込みのディストリビューションではなく組織のディストリビューションを使用する場合は、次のように記述します。
(use-package org
:ensure org-plus-contrib
...)
あなたは書かないだろう
(use-package org-plus-contrib
:ensure t
...)
というorg-plus-contrib.el
名前のパッケージがある場合でも、という名前のファイルがないためorg-plus-contrib
です。同様にあなたは書きません
(use-package auctex
:ensure t
...)
同じ理由で、名前付き機能はありませんauctex
(ファイルはありますがauctex.el
、呼び出されません(provide 'auctex)
)。
これらの不一致/セマンティクスはどれもに固有のものではないことに注意してくださいuse-package
。これらはすべて(強力で便利な)Emacsの機能でありuse-package
、これまでのところ抽象化にしか利用できません。