如何比较两个距离字符串只有一个扩展的宏?
\def\A{ICT}
\newgetenv[\ICT]{\A}
% `\newgetenv` from https://tex.stackexchange.com/a/184924
现在我想检查\ICT
评估结果是否就是\A
评估结果;即:"ICT"
。
尝试(每次一行;其他人评论):
\ifdefequal{\expandafter\ICT}{\expandafter\A}{\def\ICT{FOO}}{\def\ICT{BAR}}
\ifdefequal{\ICT}{\expandafter\A}{\def\ICT{FOO}}{\def\ICT{BAR}}
\ifdefequal{\expandafter\ICT}{\A}{\def\ICT{FOO}}{\def\ICT{BAR}}
我也尝试了同样的 3 种可能性,包括\ifcsequal
和\ifdefstring
。还尝试放弃\A
和 ,只使用:ICT
逐字逐句。
但是无论我将系统环境变量设置为何值,它们都定义了一个\ICT
值为的。BAR
$ICT
答案1
制作可用的测试文件...
\documentclass{book}%
\usepackage{etoolbox}%
\usepackage{xstring}%
\usepackage{catchfile}%
\newcommand{\getenv}[2][]{%
\CatchFileEdef{\temp}{"|kpsewhich --var-value #2"}{}%
\if\relax\detokenize{#1}\relax\temp\else\let#1\temp\fi}
%\getenv[\INCLUDE]{\string INCLUDE}
\def\newtemp{}%
\newcommand{\newgetenv}[2][]{%
\CatchFileEdef{\temp}{"|kpsewhich --var-value #2"}{}%
\StrGobbleRight{\temp}{1}[\newtemp]% Delete the trailing whitespace character
\if\relax\detokenize{#1}\relax\temp\else\edef#1{\newtemp}\fi%
}%
\begin{document}
\def\A{ICT}
\newgetenv[\ICT]{\A}
\ifx\ICT\A
\def\ICT{BAR}
\else
\def\ICT{FOO}
\fi
\show\ICT
\end{document}
默认定义\ICT
为FOO
pdflatex pp024
生产
> \ICT=macro:
->FOO.
l.32 \show\ICT
但是如果环境变量 ICT 的值为 ICT(虽然您没有说,但它似乎是您尝试实施的测试),那么\ICT
定义为BAR
。
ICT=ICT pdflatex pp024
生产
> \ICT=macro:
->BAR.
一个更简单的定义是
\documentclass{book}
\begin{document}
\def\A{ICT}
\ifx\ICT\A
\def\ICT{BAR}
\else
\def\ICT{FOO}
\fi
\show\ICT
\end{document}
在哪里
pdflatex \\def\\ICT{$ICT}\\input pp024
生产
> \ICT=macro:
->FOO.
除非你得到 ICT=ICT
ICT='ICT' ;pdflatex \\def\\ICT{$ICT}\\input pp024
产生
> \ICT=macro:
->BAR.