sty 文件中的下标代码有问题

sty 文件中的下标代码有问题

考虑以下.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}

相关内容