文档类 MWE...
\documentclass{testclass}
\begin{document}
\outputdirpath{../auxil}
\begin{minted}{php}
<?php
$x = 1;
if($x=1){
echo "x=1";
} else {
echo "x=" . $x;
}
?>
\end{minted}
\end{document}
测试类 MWE...
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2022/12/02]
\newcommand*{\outputdirpath}[1]{outputdir=#1}
%\PassOptionsToPackage{outputdir=../auxil}{minted}
\PassOptionsToPackage{\outputdirpath}{minted}
\ProcessOptions
\RequirePackage{minted}
\LoadClass[11pt]{article}
如果我按照这些文件运行,\输出目录路径没有设置,并且 Minted 包找不到.pyg文件的编译路径。如果我交换隐藏的\PassOptionsToPackage将 class 文件行与其上面的行进行比较,一切都按预期工作。
我想加载 Minted 包输出目录=../从一个类中选择。
顺便说一句,我还在寻找一本关于类/包开发的相对较新的书。
短暂性失眠!
答案1
如果您希望文档类具有 key=value 选项,则可以使用其他选项。我选择的两个选项是:
- 最新版本的 LaTeX 内核内置的机制
- 该
expkv-opt
包(免责声明:我是它的作者)
您可以使用以下两个示例\documentclass[mintedpathoneback=../auxil]{testclass}
。
LaTeX 内核
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2022/12/02]
\DeclareKeys{mintedpathoneback .store = \testclass@minted@outputdir}
\ProcessKeyOptions
\LoadClass[11pt]{article}
\ifx\testclass@minted@outputdir\@empty
\RequirePackage{minted}
\else
\RequirePackage[outputdir=\testclass@minted@outputdir]{minted}
\fi
expkv-opt
这也使用expkv-def
key=value 接口来定义你的键
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2022/12/02]
\RequirePackage{expkv-opt,expkv-def}
\ekvdefinekeys{testclass}{store mintedpathoneback = \testclass@minted@outputdir}
\ekvoProcessGlobalOptions{testclass}
\LoadClass[11pt]{article}
\ifx\testclass@minted@outputdir\@empty
\RequirePackage{minted}
\else
\RequirePackage[outputdir=\testclass@minted@outputdir]{minted}
\fi
答案2
感谢 David Carlisle 帮助我找到解决方案。现在,通过将 DocumentClass MWE 行更改为...,代码就可以正常工作了。
\documentclass[mintedpathoneback]{testclass}
...并重新排列类文件以...
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2022/12/02]
\DeclareOption{mintedpathoneback}{\newcommand\outputdirpath{../auxil}}
\ProcessOptions\relax
\LoadClass[11pt]{article}
\RequirePackage[outputdir=\outputdirpath]{minted}
能够宣布mintedpathoneback=../在 DocumentClass 选项中,然后让 class 拾取路径变量,但现在我让我的两个脑细胞放弃尝试。今晚它们完全没用。如果有人想出更好的解决方案,我会将其标记为答案。