如以下 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,在终端中看到一些完全可识别的信息消息是相当常见的。
这里的设计决定是大多数消息都是错误/警告/信息,应该同时发送到终端和日志。 两个“低级”函数\msg_term:nn
和\msg_log:nn
非常专业,旨在“不吵闹”。
大多数消息都是错误/警告/信息,应该同时发送到终端和日志。
但准确地说,信息消息只进入日志:
\msg_ info:nnnnnn {⟨module ⟩} {⟨message ⟩} {⟨arg 一 ⟩} {⟨arg 二 ⟩} {⟨arg 三 ⟩} {⟨arg 四 ⟩}
问题⟨module⟩信息⟨message⟩,将⟨arg one⟩传递给⟨argfour⟩到文本创建
职能。 信息文本被添加到日志文件中。
@dbitouze啊,对不起,是的:信息就像你说的那样在日志中。 “原始”消息的目的是它们更有可能是不需要额外“噪音”的非常低级的东西。 老实说,我们并没有真正看到它们“在野外”使用太多 - 我想我事后想知道的是用例。 (对于非常低级的东西,无论如何我都会使用\iow_log:n
/ \iow_term:n
。)
@josephwright我倾向于同意“信息”应该像“警告”一样,区别在于它没有显示在终端上,而不是它以不同的方式记录内容。 例如,警告通常使用明确的换行符格式化,这是基于以下行有一些“(模块)”前缀的想法,当我将组从警告更改为信息时,我认为所有应该更改的是它显示的位置而不是如何.
@FrankMittelbach就是这样:问题是我想到了\msg_log:nn
,它的格式较少(无)。 可以说我们可以删除\msg_log:nn
和\msg_term:nn
,因为它们实际上介于消息系统和简单地将行转储到日志之间。
好吧,我显然拿错了棍子的一端并且错误地阅读了请求。 在这种情况下,我会说正常的 2e 行为应该没有变化(即使我们在 expl3 repo 中,消息系统也适用于 2e)
@dbitouze 还要求在终端上显示一条信息消息。 也许他可以澄清一个具体案例,其中这样的消息不应该只是一个警告消息?
有时你想通知用户一些事情,但不要用警告来吓唬他。
我同意这一点——从概念上讲,我认为这些信息有两个轴心:它们出现在哪里,以及它们有多严重。
假设我有一些来自处理某些内容的诊断输出(有用但不是无用的),并且我默认将其发送到日志文件。 有时在控制台上显示它可能很好(“详细”用户选项),但将这些东西称为警告是错误的。
我有点赞同,但我不认为我们真的想要第二个轴。 错误 + 警告应始终在终端 + 日志上报告 imho,仅用于信息,似乎确实有两个类信息(仅限日志)和术语信息。
请注意,无论如何,拥有单独的轴都会有很大帮助,因为我们通常不希望所有信息突然变成 term-infos(无论如何你可以通过将 info 映射到 term-info)但通常只是一些信息也总是转到终端所以我会考虑添加一个进一步的类别terminfo
和一些相应的\msg_terminfo:nn
以便您可以在代码中明确默认行为的意图,而无需在 msg setup 中设置一些隐藏的内容.
最有用的评论
我有点赞同,但我不认为我们真的想要第二个轴。 错误 + 警告应始终在终端 + 日志上报告 imho,仅用于信息,似乎确实有两个类信息(仅限日志)和术语信息。
请注意,无论如何,拥有单独的轴都会有很大帮助,因为我们通常不希望所有信息突然变成 term-infos(无论如何你可以通过将 info 映射到 term-info)但通常只是一些信息也总是转到终端所以我会考虑添加一个进一步的类别
terminfo
和一些相应的\msg_terminfo:nn
以便您可以在代码中明确默认行为的意图,而无需在 msg setup 中设置一些隐藏的内容.