我想创建一个选项(即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
这pgfopts
pgf
是使用的键作为包选项的便捷方式。下面是一个例子
\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
由于您的问题已加标签kv选项,这是使用该包的答案。
\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