我正在编写一个包,已经用 添加了两个选项\DeclareOption
。然后\ExecuteOptions
我用 设置默认选项。这确实很有效,但现在我必须添加第二个选项类型,这似乎不起作用。
让我解释一下选项类型的含义。前几个选项(记住,那些运行良好的选项)定义了一种语言(我使用包进行了自定义翻译translations
,此选项将语言传递给翻译包和 babel),因此只传递了其中一个,例如\usepackage[en]{myPackage}
。我现在尝试做的是将第二个选项传递给我的包,其中也有两种选择(参考书目是按名称还是按外观排序),因此 usepackage 命令应如下所示:\usepackage[en, bib-by-appearance]{myPackage}
。
我所做的如下:
\DeclareOption{de}{%
% Some Code
}
\DeclareOption{en}{%
% Some Code
}
\DeclareOption{bib-by-name}{%
\bibliographystyle{abbrvnat}%
}
\DeclareOption{bib-by-appearance}{%
\bibliographystyle{template-files/custom-abbrvnat}%
}
\ExecuteOptions{en, bib-by-appearance}
\ProcessOptions\relax
这似乎不起作用。我应该如何定义选项来获得结果?
更新
我被要求提交一份 MWE,我通常也会发布一份,但我无法重现这种行为……我通常使用 ShareLaTeX 进行 MWE,因为我发现设置小文档更简单,现在我最终上传了我的整个项目并对其进行了编译。使用 ShareLaTeX 时,它运行良好,但在我的计算机上却不行。我的电脑说
Package natbib: Citation 'FooBar' on page 1 undefined.
而它应该被定义(并且它也确实被定义,就像 ShareLaTeX 示例所示)。我还测试了简单地使用\bibliographystyle{template-files/custom-abbrvnat}
而不通过选项选择它。这也很好用。所以看起来如果 bibstyle 是通过选项设置的,我的计算机就很难完成它的工作了。
\ExecuteOptions{en}
如果我更改为 ,就会失败\ExecuteOptions{en, bib-by-appearance}
。因此,我能够实现\DefineOption
这两种可能性,如果直接调用(没有选项),我也能够使用这两种 bibstyles,但是当我将包的默认值设置为 时,我会失败en, bib-by-appearance
。
更新 2
我现在还测试了如果我直接设置语言而不使用选项会发生什么,因此将\ExecuteOptions
仅包含bib-by-appearance
并且这有效。所以我想我已经找到问题所在了。现在我的问题是:
为什么这两个选项都不起作用?我该如何让它工作?
随意说出你心中的猜测,我很乐意尝试。如果我可以提供除 MWE 之外的其他内容,请告诉我。
答案1
中的空格\ExecuteOptions
是一个容易解决的问题;但还有另一个问题。输入
\documentclass{article}
\usepackage[en,bib-by-name]{sam}
\begin{document}
x
\end{document}
该.aux
文件将包含
\relax
\bibstyle{unsrtnat}
\bibstyle{abbrvnat}
运行 BibTeX 将中止加载第二个 bib 样式,这是用户想要的!
This is BibTeX, Version 0.99d (TeX Live 2017)
The top-level auxiliary file: samtest.aux
The style file: unsrtnat.bst
Illegal, another \bibstyle command---line 3 of file samtest.aux
: \bibstyle
: {abbrvnat}
I'm skipping whatever remains of this command
使用条件:
\RequirePackage{natbib}
\DeclareOption{de}{%
% Some Code
}
\DeclareOption{en}{%
% Some Code
}
\newif\ifbibbyname
\DeclareOption{bib-by-name}{%
\bibbynametrue
}
\DeclareOption{bib-by-appearance}{%
\bibbynamefalse
}
\ExecuteOptions{en,bib-by-appearance}% <--- no spaces here!
\ProcessOptions\relax
\ifbibbyname
\bibliographystyle{abbrvnat}
\else
\bibliographystyle{unsrtnat}
\fi
(我使用了标准围兜样式,而不是您定制的样式,只需替换它即可。)
答案2
发现问题
en
这令人难以置信,但事实就是如此,问题出在和之间的空格bib-by-appearance
。我刚刚试过
\ExecuteOptions{en}
\ExecuteOptions{bib-by-appearance}
这有效,然后我尝试
\ExecuteOptions{en,bib-by-appearance}
这也奏效了。此时此刻我已经觉得自己很笨了。但当我添加一个空格来写
\ExecuteOptions{en, bib-by-appearance}
又失败了。
所以如果有人遇到同样的问题,请尝试删除空格,这样就没问题了......