我的问题原本与 使用jobname来“传递参数”?
但这个问题似乎没有完整的答案。(我相信在深入了解这个问题的专家看来,这个问题已经解决了。)
查看其他一些相关帖子,
我已经能够在很大程度上解决我原来的问题,\IfSubStringInString
但不能使用\ifdefstring
。请参阅下面的示例代码。
% run this with pdflatex -jobname=hello thissourcecode.tex
\documentclass{article}
\usepackage{etoolbox}
\usepackage{substr}
\begin{document}
jobname is: ``\jobname''.
% The following gives "true"
\IfSubStringInString{\detokenize{hello}}{\jobname}{substr true}{substr false}
% The following gives "false"
\ifdefstring{\detokenize{hello}}{\jobname}{etoolbox true}{etoolbox false}
\end{document}
解决方案\IfSubStringInString
还不错,只是包中似乎没有包含精确匹配的命令。我也很乐意\ifdefstring
使用\jobname
。
答案1
您可以使用etoolbox
(以及最近发布的 LaTeX)来完成此操作。
但最好不要使用它;我提供了一个通用的字符串相等性比较和一个特定的用于比较的比较\jobname
。
\documentclass{article}
\usepackage{etoolbox}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\stringsequalTF}{mmmm}
{
\str_if_eq:eeTF { #1 } { #2 } { #3 } { #4 }
}
\NewExpandableDocumentCommand{\stringisjobnameTF}{mmm}
{
\str_if_eq:nVTF { #1 } \c_sys_jobname_str { #2 } { #3 }
}
\ExplSyntaxOff
\setlength{\parindent}{0pt} % just for the example
\begin{document}
jobname is: ``\texttt{\jobname}''
\section{With \texttt{etoolbox}}
\ExpandArgs{ee}\ifstrequal{\jobname}{\detokenize{hello}}{true}{false}
\ExpandArgs{ee}\ifstrequal{\jobname}{\detokenize{ryo}}{true}{false}
\section{Without \texttt{etoolbox}}
\subsection{With \texttt{\string\stringsequalTF}}
\stringsequalTF{\jobname}{hello}{true}{false}
\stringsequalTF{\jobname}{ryo}{true}{false}
\subsection{With \texttt{\string\stringisjobnameTF}}
\stringisjobnameTF{hello}{true}{false}
\stringisjobnameTF{ryo}{true}{false}
\end{document}