考虑以下.sty
文件:
% Den krævede LaTeX-version.
\NeedsTeXFormat{LaTeX2e}[2014/05/01]
% Pakkens navn.
\ProvidesPackage{standardopsaetning}[2014/10/16 standardopsaetning]
%%%%%%%%%%%%%%%%
%% %%
%% Pakker %%
%% %%
%%%%%%%%%%%%%%%%
% Sørger for dansk orddeling og dansk opsætning af `specielle' ord.
\RequirePackage{babel}
% Hjælper med orddeling ved `æ', `ø' og `å'.
\RequirePackage[T1]{fontenc}
% Tillader `æ', `ø' og `å' (i inputfilen).
\RequirePackage[utf8]{inputenc}
% Marginer med mere.
\RequirePackage[
hmargin = 2.4cm,
vmargin = 3cm
]{geometry}
% Matematik.
\RequirePackage{mathtools}
% Fodnoter.
\RequirePackage[
bottom,
hang,
stable
]{footmisc}
% Sidehoved og -fod.
\RequirePackage{fancyhdr}
% Figur- og tabelforklaringer.
\RequirePackage{caption}
% SI-enheder.
\RequirePackage[
locale = DE
]{siunitx}
% Intern vektorgrafik.
\RequirePackage{pstricks-add}
% Tabeller.
\RequirePackage{booktabs}
% Lister.
\RequirePackage{enumitem}
% Opstående græske bogstaver.
\RequirePackage{upgreek}
% Den sidste værdi, der angives af en tæller (`counter').
\RequirePackage{totcount}
% Mikrotypografiudvidelser til PDFTeX.
\RequirePackage{microtype}
%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% Pakkeopsætning %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%
\DeclareOption{pakkeopsaetninger}{
% ``mathtools''
\mathtoolsset{
showonlyrefs
}
% ``caption''
\DeclareCaptionLabelSeparator{tilpasning}{:\quad}
\captionsetup{
labelsep = tilpasning,
figureposition = bottom,
tableposition = top,
font = small,
labelfont = sc
}
% ``pstricks''
\psset{
dimen = m
}
}
%%%%%%%%%%%%%%%%%
%% %%
%% Makroer %%
%% %%
%%%%%%%%%%%%%%%%%
\DeclareOption{makroer}{
% Til at afgøre, om dokumentet skal udskrives eller læses på en skærm.
\newif\ifprint
% Til sænket skrift.
\newif\ifsubscript
\subscriptfalse
% Figur- og tabelplaceringer.
\providecommand*\setfloatlocations[2]{\@namedef{fps@#1}{#2}}
\setfloatlocations{figure}{htbp}
\setfloatlocations{table}{htbp}
% Fjerner ligaturer ved `f'.
\DisableLigatures[f]{encoding = T1}
% Indryk til fodnoter.
\setlength\footnotemargin{6pt}
% Sidehoved og -fod.
\pagestyle{fancy}
\renewcommand*\headrulewidth{0pt}
\setlength\headheight{14.5pt}
\lhead{}
\rhead{}
\regtotcounter{page}
\cfoot{
\ifnum \totvalue{page} > 1 \relax
\thepage
\else
%
\fi
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% `Speciel' placering %%
%% af `\DeclareOption' %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sænket skrift.
\begingroup\lccode`\~=`\_
\lowercase{\endgroup
\DeclareOption{saenketSkrift}{%
\protected\gdef~{\@ifnextchar|\subtextup\sb}%
\def\subtextup|#1|{\sb{\textup{#1}}}%
\AtBeginDocument{\catcode`\_=12 \mathcode`\_=\string"8000 }%
}%
}
% Aritmetiske beregninger.
\ExplSyntaxOn
\DeclareOption{aritmetik}{%
\cs_new_eq:NN \calc \fp_eval:n
}
\ExplSyntaxOff
% Addition eller subtraktion af fysiske størrelser med ``siunitx''.
\ExplSyntaxOn
\NewDocumentCommand\SIexpr{ O{,} m m }
{
\SIextension_siexpr:nnn { #1 } { #2 } { #3 }
}
\cs_new_protected:Npn \SIextension_siexpr:nnn #1 #2 #3
{
\seq_set_split:Nnn \l_SIextension_siexpr_input_seq { #1 } { #2 }
\seq_pop_left:NN \l_SIextension_siexpr_input_seq \l_SIextension_siexpr_first_tl
\seq_clear:N \l_SIextension_siexpr_output_seq
\seq_put_right:Nx \l_SIextension_siexpr_output_seq
{
\fp_compare:nTF { \l_SIextension_siexpr_first_tl > 0 }
{ \num { \l_SIextension_siexpr_first_tl } }
{ - \num { \tl_tail:V \l_SIextension_siexpr_first_tl } }
}
\seq_map_inline:Nn \l_SIextension_siexpr_input_seq
{
\seq_put_right:Nx \l_SIextension_siexpr_output_seq
{
\fp_compare:nTF { ##1 > 0 }
{ + \num { ##1 } }
{ - \num { \tl_tail:n { ##1 } } }
}
}
\SI[
parse-numbers = false,
quotient-mode = fraction,
input-product = *,
output-product = \cdot
]
{
\sisetup{parse-numbers}
\left( \seq_use:Nn \l_SIextension_siexpr_output_seq { } \right)
}
{ #3 }
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% Eksekvering af opsætningen %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ExecuteOptions{pakkeopsaetninger}
\ExecuteOptions{makroer}
\ExecuteOptions{saenketSkrift}
\ExecuteOptions{aritmetik}
\ProcessOptions
下标代码(带有 的块\DeclareOption{saenketSkrift}
)不再起作用(以前可以)。这是为什么?我该如何让它再次起作用?
PS 有问题的代码取自这里。
答案1
您定义的选项是用户无法以任何方式覆盖的:那么,它们就不是选项。
这是一个仅包含一个选项的完善版本,即pakkeopsaetninger
。语言也作为选项传递,但我不会这样做,并让用户明确加载babel
他们需要的语言。
我删除了这些评论,因为我无法理解它们;我也改变了totpages
方法,但那不是很好,我更喜欢这种zref-lastpage
方法。
\NeedsTeXFormat{LaTeX2e}[2014/05/01]
\ProvidesPackage{standardopsaetning}[2014/10/16 standardopsaetning]
\RequirePackage{mathtools}
\DeclareOption{pakkeopsaetninger}{\mathtoolsset{showonlyrefs}}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{babel}}
\ProcessOptions\relax
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage{babel}
\RequirePackage[
hmargin = 2.4cm,
vmargin = 3cm
]{geometry}
\RequirePackage[
bottom,
hang,
stable
]{footmisc}
\RequirePackage{fancyhdr}
\RequirePackage{caption}
\RequirePackage[
locale = DE
]{siunitx}
\RequirePackage{pstricks-add}
\RequirePackage{booktabs}
\RequirePackage{enumitem}
\RequirePackage{upgreek}
\RequirePackage[lastpage]{zref}
\RequirePackage{microtype}
% ``caption''
\DeclareCaptionLabelSeparator{tilpasning}{:\quad}
\captionsetup{
labelsep = tilpasning,
figureposition = bottom,
tableposition = top,
font = small,
labelfont = sc
}
% ``pstricks''
\psset{
dimen = m
}
\newif\ifprint
\newif\ifsubscript
\providecommand*\setfloatlocations[2]{\@namedef{fps@#1}{#2}}
\setfloatlocations{figure}{htbp}
\setfloatlocations{table}{htbp}
\DisableLigatures[f]{encoding = T1}
\setlength\footnotemargin{6pt}
\pagestyle{fancy}
\renewcommand*\headrulewidth{0pt}
\setlength\headheight{14.5pt}
% http://tex.stackexchange.com/a/4258
\zref@newprop*{numpage}{\the\value{page}}
\zref@addprop{main}{numpage}
\fancyhf{}
\fancyfoot[C]{%
\ifnum \zref@extractdefault{LastPage}{numpage}{0} > 1
\thepage
\fi
}
\begingroup\lccode`\~=`\_
\lowercase{\endgroup
\protected\def~{\@ifnextchar|\subtextup\sb}%
}
\def\subtextup|#1|{\sb{\textup{#1}}}%
\AtBeginDocument{\catcode`\_=12 \mathcode`\_=\string"8000 }
\ExplSyntaxOn
\cs_new_eq:NN \calc \fp_eval:n
\NewDocumentCommand\SIexpr{ O{,} m m }
{
\SIextension_siexpr:nnn { #1 } { #2 } { #3 }
}
\cs_new_protected:Npn \SIextension_siexpr:nnn #1 #2 #3
{
\seq_set_split:Nnn \l_SIextension_siexpr_input_seq { #1 } { #2 }
\seq_pop_left:NN \l_SIextension_siexpr_input_seq \l_SIextension_siexpr_first_tl
\seq_clear:N \l_SIextension_siexpr_output_seq
\seq_put_right:Nx \l_SIextension_siexpr_output_seq
{
\fp_compare:nTF { \l_SIextension_siexpr_first_tl > 0 }
{ \num { \l_SIextension_siexpr_first_tl } }
{ - \num { \tl_tail:V \l_SIextension_siexpr_first_tl } }
}
\seq_map_inline:Nn \l_SIextension_siexpr_input_seq
{
\seq_put_right:Nx \l_SIextension_siexpr_output_seq
{
\fp_compare:nTF { ##1 > 0 }
{ + \num { ##1 } }
{ - \num { \tl_tail:n { ##1 } } }
}
}
\SI[
parse-numbers = false,
quotient-mode = fraction,
input-product = *,
output-product = \cdot
]
{
\sisetup{parse-numbers}
\left( \seq_use:Nn \l_SIextension_siexpr_output_seq { } \right)
}
{ #3 }
}
\ExplSyntaxOff
\endinput
这是一份测试文档。当然我不可能测试所有命令。请测试它并报告任何问题。
\documentclass{article}
\usepackage[danish]{standardopsaetning}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\end{document}