LaTeX 内核

LaTeX 内核

文档类 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 选项,则可以使用其他选项。我选择的两个选项是:

  1. 最新版本的 LaTeX 内核内置的机制
  2. 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-defkey=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 拾取路径变量,但现在我让我的两个脑细胞放弃尝试。今晚它们完全没用。如果有人想出更好的解决方案,我会将其标记为答案。

相关内容