我将参数存储到字符串变量中时得到了意外结果,并添加了语句“\str_show:N \l_tmpa_str”来生成调试输出。Texworks 将该输出视为错误。我的第一个想法是使用 \str_log:N,但它不存在。
我担心的是为什么我会在“semi-”周围得到一个多余的连字符和引号,以及获取诊断输出的正确方法是什么。
下划线中出现多余字符的原因是字符串函数和变量不适用于您需要渲染的文本。一旦我将下划线中的文本切换到标记列表变量,一切就都正常了。
\documentclass{article}
\usepackage{mathtools}
\usepackage{xparse}
\ExplSyntaxOn
% Render underscored with some variation of strict
\NewDocumentCommand{\strict}{O{strict} m}
{
\show_strict:nn {#1} {#2}
}
\cs_new_protected:Npn \show_strict:nn #1 #2
{
\str_set:Nn \l_tmpa_str {#1}
l_tmpa_str~is~ \l_tmpa_str
\str_show:N \l_tmpa_str
\str_if_eq:eeTF {\str_item:nn {#1} {-1}} {-}
{
\str_set:Nx \l_tmpa_str {{\l_tmpa_str}strict}
}
{
\str_case:nn {#1}
{
{*} {\str_set:Nn \l_tmpa_str {(semi-strict,strict)}}
{**} {\str_set:Nn \l_tmpa_str {semi-strict~(strict)}}
}
}
\underset {\textup{\l_tmpa_str}} {#2}
}
\ExplSyntaxOff
\begin{document}
\begin{enumerate}
\item Test $\strict{{default}}$ \\*
expect underset with upright "strict"
\item Test $\strict[semi-]{{hyphen}}$
expect underset with upright "semi-strict"
\item Test $\strict[*]{{star}}$
expect underset with upright "(semi-strict,strict)"
\item Test $\strict[**]{{starstar}}$
expect underset with upright "semi-strict (strict)"
\end{enumerate}
\end{document}
答案1
是的,\str_log:N
之前\str_log:n
没有,但已在下一版本中添加,请参阅https://github.com/latex3/latex3/blob/master/l3kernel/CHANGELOG.md和https://github.com/latex3/latex3/commit/83d2792ccf9e1c03b8a06e85c889d442da8e798c
在此期间,您可以使用\tl_log:N
,在您的情况下它将记录
> \l_tmpa_str=strict.
> \l_tmpa_str=semi-.
> \l_tmpa_str=*.
> \l_tmpa_str=**.