对于调试和构建私有包有用的各种宏的 expl3 等价物是什么

对于调试和构建私有包有用的各种宏的 expl3 等价物是什么

当我编写自己的私有风格包时(例如在开发它们时),我发现它很有用,可以\typeout帮助我查看我当前创建的内容,或者找出哪行代码是问题的根源(特别是当抛出神秘的错误消息时)。

目前,我正在重构一些expl3我以前编写的旧代码,当时我对 了解甚少expl3。在整个代码中,我加入了\typeout和之类的东西\space,使终端输出简单易读。我实际上喜欢这个终端输出,因为它可以帮助我调试东西,但我找不到 的任何expl3等价物\typeout。我能找到的最好的\msg_warning:...东西是 向终端抛出太多东西。

同样,我喜欢\space通过连接在终端屏幕上创建更大的空白空间。连接~不起作用。

在调试和输出到终端时我真正欣赏的第三个宏是\detokenize

看来,在编写时expl3,我应该坚持使用expl3宏等。有人对编写expl3以下等效项有什么建议吗:

\typeout{....}
\detokenize{....}
\space

答案1

您希望\iow_term:n以通常的方式扩展宏。

\RequirePackage{expl3}

\ExplSyntaxOn

\iow_term:n {Hi,~Andrew,~how~are~you?~This~message~will~automatically~
 wrap~when~reaching~a~predefined\c_space_tl limit. \\ \\
 You~can~force~a~break~and~use~\exp_not:N \tl_to_str:n
 for~showing~\tl_to_str:n{\whatever~you~\want}}

这将输出

*************************************************
* Hi, Andrew, how are you? This message will automatically wrap when
* reaching a predefined limit.
* 
* You can force a break and use \tl_to_str:n for showing \whatever you \want 
*************************************************

\iow_term:n的类似物也是如此\typeout,而\tl_to_str:n\detokenize;空间是\c_space_tl,即确切地和 一样\space

还有\iow_log:n仅用于写入日志文件的功能。

答案2

grep是你的朋友:

l3kernel/l3tl.dtx:\cs_new_eq:NN \tl_to_str:n \etex_detokenize:D


l3kernel/l3tl.dtx:\tl_const:Nn \c_space_tl { ~ }

如果您不喜欢消息\msg功能,它可能\typeout仍然是您的朋友。

答案3

第一个答案不再准确,没有更多的星星,扩展策略也发生了变化。必须适应使用 或\iow_term:n\iow_term:x前者不扩展任何内容,而后者扩展...可扩展的内容。

下面是一个具有各种设置的示例,用于说明如何扩展某些宏或不扩展。

\documentclass{minimal}
\ExplSyntaxOn
\tl_set:Nn \l_tmpa_tl { 2 + 2 }
\int_set:Nn \l_tmpa_int { \l_tmpa_tl }
\iow_term:n{****~\iow_term:n :~\l_tmpa_tl~=~\l_tmpa_int}
\iow_term:x{****~\iow_term:x :~\l_tmpa_tl~\c_space_tl=~\l_tmpa_int}
\iow_term:x{****~\iow_term:x :~\l_tmpa_tl~\c_space_tl=~\int_use:N\l_tmpa_int}
\iow_term:x{****~\iow_term:x :~\exp_not:N \l_tmpa_tl~=~\int_use:N\l_tmpa_int}
\ExplSyntaxOff
\begin{document}
\end{document}

终端输出内容为

**** \iow_term:n : \l_tmpa_tl = \l_tmpa_int 
**** \iow_term:x : 2+2 = \l_tmpa_int 
**** \iow_term:x : 2+2 = 4
**** \iow_term:x : \l_tmpa_tl = 4

有时\c_space_tl需要在 之前插入一个空格=

相关内容