次のMCEに示されているように、 \msg_term
メッセージは、( \msg_warning
メッセージとは異なり)どこから来たのかを示しません。
\begin{filecontents*}[overwrite]{mypackage.sty}
\ProvidesExplPackage
{mypackage}
{2021-05-11}
{0.1}
{
My Nice package
}
\NeedsTeXFormat{LaTeX2e}
%
\msg_new:nnn {mypackage} {Foo} {FOOBAR}
\msg_warning:nn {mypackage} {Foo}
\msg_term:nn {mypackage} {Foo}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage{mypackage}
\begin{document}
\end{document}
書き込み:
パッケージmypackage警告:FOOBAR
FOOBAR
一方、後者の場合、次のことが予想されます。
パッケージmypackage情報:FOOBAR
私はl3msg
にあまり詳しくありませんが、これは仕様によるものだと思います。 「情報」メッセージが必要な場合は、 \msg_info:nn
を使用して取得できます(ただし、ログに移動します)。
\msg_info:nn
(ただし、ログに移動します)。
それがポイントです:AFAICT、ターミナルで完全に識別可能ないくつかの情報メッセージを見るのはかなり一般的です。
ここでの設計上の決定は、ほとんどのメッセージはエラー/警告/情報であり、端末とログの両方に送信する必要があるというものでした。 2つの「低レベル」関数\msg_term:nn
と\msg_log:nn
はかなり特殊化されており、「ノイズがない」ことを目的としています。
ほとんどのメッセージはエラー/警告/情報であり、端末とログの両方に送信する必要があります。
しかし正確には、情報メッセージはログにのみ送信されます。
\ msg_ info:nnnnnn {⟨module⟩} {⟨message⟩} {⟨argone⟩} {⟨argtwo⟩} {⟨argthree⟩} {⟨argfour⟩}
⟨モジュール⟩情報⟨メッセージ⟩を発行し、⟨argone⟩から⟨argfour⟩をテキスト作成に渡します
関数。 情報テキストがログファイルに追加されます。
@dbitouzeああ、すみません、はい:あなたが言うように情報はただログにあります。 「生の」メッセージの目的は、追加の「ノイズ」が必要とされない非常に低レベルのものである可能性が高いことでした。 正直なところ、「実際に」それらがあまり使用されているのを見たことがありません。後から考えて疑問に思うのは、ユースケースだと思います。 (本当に低レベルのものについては、とにかく\iow_log:n
/ \iow_term:n
ます。)
@josephwright私は、「情報」は「警告」のようにすべきであることに同意する傾向がありますが、端末には表示されませんが、ログが異なるという違いはありません。 たとえば、警告は通常、次の行に「(モジュール)」プレフィックスがあるという考えに基づいて、明示的な改行でフォーマットされます。グループを警告から情報に変更すると、変更する必要があるのは、表示される場所だけであり、どのように表示されるかではないと思います。 。
@FrankMittelbachその場合です。問題は、フォーマットが少ない(ない) \msg_log:nn
について考えること\msg_log:nn
と\msg_term:nn
は、実際にはメッセージシステムとログへの行のダンプの中間にあるため、おそらく削除できます。
わかりました、私は明らかにスティックの間違った端を手に入れ、リクエストを間違って読みました。 その場合、通常の2eの動作に変更はないはずです(そして、expl3リポジトリにいる場合でもメッセージングシステムは2e用です)
@dbitouzeは、端末にも表示される情報メッセージを要求します。 たぶん彼は、そのようなメッセージが単なる警告メッセージであってはならない具体的なケースを明確にすることができますか?
ユーザーに何かを知らせたいが、警告で怖がらせたくない場合があります。
私はこれに同意します—概念的には、これらのメッセージには2つの軸があると思います。メッセージが表示される場所と重大度です。
いくつかのものを処理することで診断(わずかに役立つが役に立たない)出力があり、それをデフォルトでログファイルに送信するとします。 コンソールに表示するのは良い場合もありますが(「詳細な」ユーザーオプション)、これらを警告と呼ぶのは誤りです。
私はそれを少し秒で言いますが、私たちは本当に2番目の軸が必要だとは思いません。 エラー+警告は常にターミナル+ログでimhoに報告する必要があります。情報についてのみ、実際にはinfo(ログのみ)とterm-infoの2つのクラスがあるようです。
通常、すべての情報が突然用語情報になることは望ましくないため(情報を用語情報にマッピングすることで可能です)、通常は一部の情報だけが常にターミナルなので、さらにカテゴリterminfo
とそれに対応する\msg_terminfo:nn
追加することを検討します。これにより、メッセージの設定で多少隠された設定をしなくても、コードでデフォルトの動作の意図を明確にすることができます。 。
最も参考になるコメント
私はそれを少し秒で言いますが、私たちは本当に2番目の軸が必要だとは思いません。 エラー+警告は常にターミナル+ログでimhoに報告する必要があります。情報についてのみ、実際にはinfo(ログのみ)とterm-infoの2つのクラスがあるようです。
通常、すべての情報が突然用語情報になることは望ましくないため(情報を用語情報にマッピングすることで可能です)、通常は一部の情報だけが常にターミナルなので、さらにカテゴリ
terminfo
とそれに対応する\msg_terminfo:nn
追加することを検討します。これにより、メッセージの設定で多少隠された設定をしなくても、コードでデフォルトの動作の意図を明確にすることができます。 。