要求和输入验证

要求和输入验证

我想重新创建当前的 makros 以在每个文档中工作。目前我正在执行此任务,如果加载了包,则将根据需要提供命令。

看看下面的 MWE,它按预期工作。

\documentclass{scrreprt}
\usepackage{xifthen}

\newboolean{pkglddebug}
\setboolean{pkglddebug}{true}

\newboolean{pkgldxcolor}
\setboolean{pkgldxcolor}{false}

\providecommand{\pkgldxcolortxt}{Package xcolor not loaded or missing}

% Comment this package in or out to see what will happen.
% \usepackage{xcolor}

\makeatletter
\@ifpackageloaded{xcolor}%
            {
            \setboolean{pkgldxcolor}{true}
            \renewcommand{\pkgldxcolortxt}{Package loaded}
            }
            {           
            }
\makeatother


\ifthenelse{\boolean{pkgldxcolor}}%
    {%  
    \providecommand{\test}[1]{\textcolor{red}{\textbf{#1}}}
    }
    {
    \ifthenelse{\boolean{pkglddebug}}%
        {%
        \providecommand{\test}[1]{Need Package xcolor}
        }
        {
        }
    \providecommand{\test}[1]{\textbf{#1}} % or \providecommand{\test}{} if you don't want to access anything
    \providecommand{\textcolor}[2]{Sorry, xcolor not loaded, you tried to make #2 in color #1}
    }


\begin{document}
\begin{itemize}
\item \test{A}
\item \textcolor{red}{text}
\item \pkgldxcolortxt
\end{itemize}
\end{document}

如果您注释掉 xcolor,示例仍可编译。如果您设置了调试标志,您将看到为什么该命令无法按预期工作。

这是一个非常原始的例子,检查包是否已加载并告诉命令如何工作。

我的问题:有没有更好的方法来实现这个解决方案?第二个问题是,是否有任何好的方法来验证命令的输入,例如

\providecommand{\mytext}[1]{
\providecommand{\mytestinput}{#1}
\renewcommand{\mytestinput}{#1}

\ifthenelse{\equal{\mytestinput}{validate[a-zA-Z]}{}{\renewcommand{\mytestinput}{Defaultvalue}}
\textbf{#1}
}

在这种情况下,每次编译时该命令都会起作用,并且不可能发生错误的行为。

这是一个好主意吗?

答案1

引入\setboolean{pkgldxcolor}{true}然后测试布尔值没有任何用处,为什么不简单地使用

  \@ifpackageloaded{xcolor}
      {% do nothing
      }
      {% define \textcolor etc
      }

但在这种情况下,你似乎根本不需要测试,你可以,\usepackage{xcolor}或者如果你不想强制加载颜色,只需

\providecommand{\textcolor}[2]{%
  Sorry, xcolor not loaded, you tried to make #2 in color #1}

它不需要由包加载测试来保护,因为它根本不会执行任何操作,也不会被color加载和定义\textcolor

相关内容