我正在使用 \newcommand 和 \ifdefined。我对以下代码有疑问,因为它会产生错误,但我不知道哪里出了问题:
\documentclass[a4paper,11pt,english]{report}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage[table,xcdraw]{xcolor}
\begin{document}
\newcommand{\FailedReq}{
Nour
}
\newcommand{\ReqOpenIssues}{}
%\newcommand{\NoOpenIssues}{}
\newcommand{\OpenIssues}[1]{\ifcsname#1OpenIssues\endcsname \Failed#1 \else \ifdefined\NoOpenIssues NA \fi \fi
}
\OpenIssues{Req}
\end{document}
有什么帮助吗?
答案1
这和你之前的问题完全一样,你尝试过
\ifdefined\#1OpenIssues
希望当宏的参数为时\#1OpenIssues
成为。\ReqOpenIssues
Req
抱歉,但 TeX 使用的是在定义时形成的标记。在替换文本中,标记是
\ifdefined•\#•1•O•p•e•n•I•s•s•u•e•s
(项目符号只是为了清晰起见将标记分开)。特别是替换文本的那部分从来没有#•1
标记参数替换的位置。
同样地
\Failed#1
是三个 token
\Failed•#•1
并且参数 replacement 得出
\Failed•R•e•q
(四个令牌)。
原语\ifcsname
使用匹配的标记形成一个控制序列名称\endcsname
;然后它测试该控制序列是否已定义。
对于手头的问题,你必须使用形成控制序列并执行它的相应原语,所以
\csname Failed#1\endcsname
答案2
如果#1
是req
,则 \Failed#1
与相同,并给出未定义\Failed req
的错误。\Failed
您打算执行\FailedReq
以便生成该命令名称,您应该将其替换\Failed#1
为\csname Failed#1\endcsname