latex @temps(wa) 命令

latex @temps(wa) 命令

我想了解更多有关 LaTeX 的临时命令,例如\@tempa, \@tempswatrue特别是对于以下构造,我想知道我的替换是否正确:

% Provide bool for loaded package
\newcommand\isPackageLoaded[1]{%
  \providebool{\tpl@idstring@#1}
  \IfElsePackageLoaded{#1}{%
    \setboolean{\tpl@idstring@#1}{true}%
  }{%
    \setboolean{\tpl@idstring@#1}{false}
  }%
  \boolean{\tpl@idstring@#1}%
}

替换为以下代码

\newcommand\isPackageLoaded[1]{%
  \IfElsePackageLoaded{#1}{%
    \@tempswatrue
  }{%
    \@tempswafalse
  }%
  \boolean{\@tempswa}%
}

编辑:我应该补充一点,第一个代码也是错误的:

! Undefined control sequence.
\isPackageLoaded #1->\providebool {\tpl@idstring@
#1} \IfElsePackageLoaded {...

EDIT2:处理布尔序列时,存在一些 iften 与 etoolbox 问题。

仅使用 ifthen 命令不起作用:

\newcommand\isPackageLoaded[1]{%
  \provideboolean{tpl@package@#1}%
  \IfElsePackageLoaded{#1}%
    {\setboolean{tpl@package@#1}{true}}
    {\setboolean{tpl@package@#1}{false}}%
    \boolean{tpl@package@#1}%
}
\begin{document}
\ifthenelse{\isPackageLoaded{lmodern}}{lmodern loaded}{lmodern NOT loaded}
\end{document}

错误:

! Incomplete \iffalse; all text was ignored after line 35.
<inserted text>
\fi

如果我只使用 etoolbox cs:

\newcommand\isPackageLoaded[1]{%
  \providebool{tpl@package@#1}%
  \IfElsePackageLoaded{#1}%
    {\setbool{tpl@package@#1}{true}}
    {\setbool{tpl@package@#1}{false}}%
    \boolean{tpl@package@#1}%
}

我收到错误:

! Missing = inserted for \ifnum.
<to be read again>
\escapechar
l.35 \ifthenelse{\isPackageLoaded{lmodern}}
{lmodern loaded}{lmodern NOT loaded}
I was expecting to see `<', `=', or `>'. Didn't.

看起来两者不能一起使用。但只使用其中一个对我来说不起作用。

答案1

\providebool期望一个字符串作为其参数;所以

\providebool{tpl@idstring@#1}

应该是可行的方法。但是 LaTeX 已经提供了一个用于测试包是否已加载的命令:\@ifpackageloaded

然而,每次都说\@ifpackageloaded{somepackage}{true}{false}可能会很麻烦,特别是在需要考虑多个包裹的情况下。

\newcommand\isPackageLoaded[1]{%
  \providebool{tpl@p@#1}
  \@ifpackageloaded{#1}
    {\setboolean{tpl@p@#1}{true}}
    {\setboolean{tpl@p@#1}{false}}%
}

然后你可以说

\isPackageLoaded{hyperref}
\isPackageLoaded{caption}

将布尔值设置为正确的值,例如,

\ifboolexpr{ bool {tpl@p@hyperref} and bool {tpl@p@caption} }
   { what to do in case both packages are loaded }
   { what to do otherwise }

相关内容