使用 sty 文件的选项

使用 sty 文件的选项

我想创建一个选项(即grid)来sty生成一个覆盖整个页面的网格。

我成功使用

\newif\if@sigur@grid
\DeclareOption{grid}{\@sigur@gridtrue}

并使用下面的代码(我从 SE 的某处复制而来,位于一些代码块中)。

\if@sigur@grid
  \IfFileExists{tikz.sty}
    {\RequirePackage{tikz}%
    \usetikzlibrary{shapes.misc}%
    \usepackage{eso-pic}%
    }
    {\PackageWarning{sigur}{You requested `tikz.sty' %MessageBreak 
    which doesn't exist on your system}
    }
    \AtBeginDocument{
     \AddToShipoutPicture{%
     \begin{tikzpicture}[overlay,remember picture]
     \draw[red!30!white]
                 (current page.south west) grid[step=1mm]
                 (current page.north east);
     \draw[red!80!white]
                 (current page.south west) grid[step=10mm]
                 (current page.north east);
     \end{tikzpicture} 
     }
     }
\fi

嗯,这很好,而且可以正常工作。我只需sty使用该选项加载文件grid,就会出现红色网格。

现在我的问题来了。如您所见,网格是用红色绘制的。我希望能够grid在加载时将其颜色传递给选项。例如,默认颜色是红色,但如果我想要蓝色网格,我只需使用grid=blue选项,网格就会显示为蓝色。

这个怎么做?

附言:我想先测试一下是否安装了其他软件包。我正在对其他软件包进行此操作,\IfFileExists{}并且它正在运行。但是对于下面@cgnieder 提出的解决方案,我无法执行此操作。

测试的原因在于有时我与其他用户共享此样式文件,并且我想告知他们某些选项不起作用,而不是仅显示由缺少包导致的许多错误。

答案1

pgfoptspgf是使用的键作为包选项的便捷方式。下面是一个例子

\usepackage{sigur}

不绘制网格,

\usepackage[grid]{sigur}

绘制默认的红色网格,并且

\usepackage[grid=green]{sigur}

绘制绿色网格。

\RequirePackage{filecontents}% be careful not to overwrite your actual package!
\begin{filecontents}{sigur.sty}
\ProvidesPackage{sigur}[2013/11/09 v0.0 a sample package]

\newif\if@sigur@grid
\newcommand*\sigur@grid@color{red}

\IfFileExists{pgfopts.sty}{% only if `pgfopts' is available
\RequirePackage{pgfopts}

\pgfkeys{
  sigur/.cd ,
    grid/.code =
      \@sigur@gridtrue
      \renewcommand*\sigur@grid@color{##1} ,
    grid/.default = red % if no value is given
}

\ProcessPgfOptions{/sigur}
}{% else
\DeclareOption{grid}{\@sigur@gridtrue}
\ProcessOptions*\relax
}

\if@sigur@grid
  \RequirePackage{tikz}
  \usetikzlibrary{shapes.misc}
  \RequirePackage{eso-pic}
  \AtBeginDocument{%
    \AddToShipoutPicture{%
      \begin{tikzpicture}[overlay,remember picture]
        \draw[\sigur@grid@color!30!white]
          (current page.south west) grid[step=1mm]
          (current page.north east);
        \draw[\sigur@grid@color!80!white]
          (current page.south west) grid[step=10mm]
          (current page.north east);
      \end{tikzpicture}
    }%
  }
\fi
\end{filecontents}
\documentclass{article}
\usepackage[grid=green]{sigur}
\begin{document}
foo
\end{document}

答案2

由于您的问题已加标签,这是使用该包的答案。

\RequirePackage{filecontents}
\begin{filecontents}{sigur.sty}
\ProvidesPackage{sigur}[2013/11/09 v0.0 a sample package]

\RequirePackage{kvoptions}

\newif\ifsigur@grid
\DeclareStringOption{grid}[red]
\AddToKeyvalOption*{grid}{\sigur@gridtrue}

\ProcessKeyvalOptions*

\ifsigur@grid
  \RequirePackage{tikz}
  \usetikzlibrary{shapes.misc}
  \RequirePackage{eso-pic}
  \AtBeginDocument{%
    \AddToShipoutPicture{%
      \begin{tikzpicture}[overlay,remember picture]
        \draw[\sigur@grid!30!white]
          (current page.south west) grid[step=1mm]
          (current page.north east);
        \draw[\sigur@grid!80!white]
          (current page.south west) grid[step=10mm]
          (current page.north east);
      \end{tikzpicture}
    }%
  }
\fi
\end{filecontents}
\documentclass{article}
\usepackage[grid=green]{sigur}
%\usepackage[grid]{sigur}
%\usepackage{sigur}
\begin{document}
foo
\end{document}

我已向sigur包添加了三个可能的调用。无选项的调用不会绘制任何网格(但如果在之前的运行中指定了.aux该选项,则应在处理之前删除该文件)。grid

相关内容