我修改的.sty 文件和 babel 的 ngerman 有冲突吗?

我修改的.sty 文件和 babel 的 ngerman 有冲突吗?

有一些我不明白的冲突或错误。我可以跳过它,没有任何可见的事情发生。输出正常,一切似乎都很好。但我仍然想摆脱错误消息。如果我运行以下最小示例:

\documentclass[]{scrbook}

\usepackage[applemac, grafiken]{tahbiblatex}
\usepackage[ngerman]{babel}


\begin{document}

Testing äüöaüä.

\end{document}

我收到错误信息:

   ! Missing = inserted for \ifnum.
<to be read again> 
                   ,
l.4 \usepackage
               [ngerman]{babel}
? 
! Missing number, treated as zero.
<to be read again> 
                   ,
l.4 \usepackage
               [ngerman]{babel}

这是我的.sty 文件:

\NeedsTeXFormat{LaTeX2e}\relax
\ProvidesPackage{tahbiblatex}[2012, by tah modified by sm]

\RequirePackage{ifthen}

\DeclareOption{latin1}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{applemac}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{cp850}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{utf8}{\PassOptionsToPackage{\CurrentOption}{inputenc}}

\DeclareOption{dvi}{%
\newif\ifpdf
\ifx\pdfoutput\undefined
    \pdffalse
\else
    \pdfoutput=0
    \pdftrue
\fi}

\newcounter{Grafiken}\setcounter{Grafiken}{0}
\DeclareOption{grafiken}{\setcounter{Grafiken}{1}}

\newcounter{Randausgleich}\setcounter{Randausgleich}{0}
\DeclareOption{randausgleich}{\setcounter{Randausgleich}{1}}

\newcounter{Tabellen}\setcounter{Tabellen}{0}
\DeclareOption{tabellen}{\setcounter{Tabellen}{1}}

\newcounter{Sync}\setcounter{Sync}{0}
\DeclareOption{sync}{\setcounter{Sync}{1}}

\ProcessOptions

\RequirePackage{fixltx2e}
\RequirePackage{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[T1]{url}
\RequirePackage{setspace}
%\RequirePackage[german]{varioref}
\RequirePackage{textcomp}

\newcommand{\urlangabe}[2]{%
$\langle$\url{#1}$\rangle$ -- Zugriff am #2}

\def\hierlockern {\begingroup \def\par{\endgraf\endgroup}%
  \tolerance 1414%
  \hbadness 1414%
  \emergencystretch 1.5em%
  \hfuzz 0.3pt%
  \vfuzz \hfuzz%
  \raggedbottom%
}

\newcommand{\alleslockern}{%
  \tolerance 1414%
  \hbadness 1414%
  \emergencystretch 1.5em%
  \hfuzz 0.3pt%
  \vfuzz \hfuzz%
  \raggedbottom%
}
\ifthenelse{\value{Grafiken}=1}
  {
  \ifx\pdfoutput\undefined \newcount\pdfoutput \fi
  \ifcase\pdfoutput
      \RequirePackage[dvips]{graphicx}
      \DeclareGraphicsExtensions{.eps}
      \typeout{Paket tah Meldung: Die Option `grafiken' fuer DVI wurde gewaehlt.}%
\else
    \RequirePackage[pdftex]{graphicx}
    \DeclareGraphicsExtensions{.jpg,.tif,.png,.pdf}
    \typeout{Paket tah Meldung: Die Option `grafiken' fuer PDF wurde gewaehlt.}%
  \fi}
  {}

\ifthenelse{\value{Sync}=1}
  {
    \ifx\pdfoutput\undefined \newcount\pdfoutput \fi
    \ifcase\pdfoutput
    \RequirePackage{srcltx}
    \typeout{Paket tah Meldung: Die Option `sync' fuer DVI wurde gewaehlt.}%
    \else
    \RequirePackage{pdfsync}
    \typeout{Paket tah Meldung: Die Option `sync' fuer PDF wurde gewaehlt.}%
    \fi
}
  {}


\ifthenelse{\value{Randausgleich}=1}
  {\typeout{Paket tah Meldung: Die Option `randausgleich' wurde gewaehlt.}%
  \RequirePackage[activate]{pdfcprot}}
  {}

\ifthenelse{\value{Tabellen}=1}
  {\typeout{Paket tah Meldung: Die Option `tabellen' wurde gewaehlt.}%
  \RequirePackage{tabularx}
  \RequirePackage{ragged2e}
  \RequirePackage{dcolumn}
  \RequirePackage{booktabs}
  \newcolumntype{L}{>{\RaggedRight\hspace{0pt}\arraybackslash}l}
  \newcolumntype{Y}{>{\RaggedRight\hspace{0pt}\arraybackslash}X}
  \newcolumntype{d}[1]{>{\DC@{.}{,}{#1}}l<{\DC@end}}
  }
  {}



\endinput

我其实也不需要所有功能。因此,最好将其精简为所需的最少功能。

答案1

可选参数\ProvidesPackage必须采用以下形式

[yyyy/mm/dd Additional info]

例如

\ProvidesPackage{tahbiblatex}[2012/04/10, by tah modified by sm and egreg]

特别是,一位数的天数或月份数必须0以年份为前缀必须为四位数形式。因此,2013 年 1 月 2 日必须表示为

2013/01/02

转到包的内容,所有这些\pdfoutput都是错误的:需要包ifpdf并使用\ifpdf它提供的条件。这是一个修正版本;请注意,为每个选项分配一个计数器会浪费资源:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tahbiblatex}[2012/04/10, by tah modified by sm]

\RequirePackage{ifpdf}

\DeclareOption{latin1}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{applemac}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{cp850}{\PassOptionsToPackage{\CurrentOption}{inputenc}}
\DeclareOption{utf8}{\PassOptionsToPackage{\CurrentOption}{inputenc}}

\DeclareOption{dvi}{\pdfoutput=\z@\pdffalse}
\DeclareOption{grafiken}{\let\tah@grafiken=T}
\DeclareOption{randausgleich}{\let\tah@randausgleich=T}
\DeclareOption{tabellen}{\let\tah@tabellen=T}
\DeclareOption{sync}{\let\tah@sync=T}

\ProcessOptions\relax

\RequirePackage{fixltx2e}
\RequirePackage{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[T1]{url}
\RequirePackage{setspace}
\RequirePackage{textcomp}

\newcommand{\urlangabe}[2]{%
  $\langle$\url{#1}$\rangle$ -- Zugriff am #2}

\def\hierlockern {\begingroup \def\par{\endgraf\endgroup}%
  \tolerance 1414
  \hbadness 1414
  \emergencystretch 1.5em
  \hfuzz 0.3pt
  \vfuzz \hfuzz
  \raggedbottom
}

\newcommand{\alleslockern}{%
  \tolerance 1414
  \hbadness 1414
  \emergencystretch 1.5em
  \hfuzz 0.3pt
  \vfuzz \hfuzz
  \raggedbottom
}

\ifdefined\tah@grafiken
  \typeout{Paket tah Meldung: Die Option `grafiken' fuer 
    \ifpdf PDF\else DVI\fi\space wurde gewaehlt.}
\fi

\ifdefined\tah@sync
  \ifpdf
    \RequirePackage{pdfsync}
    \typeout{Paket tah Meldung: Die Option `sync' fuer PDF wurde gewaehlt.}
  \else
    \RequirePackage{srcltx}
    \typeout{Paket tah Meldung: Die Option `sync' fuer DVI wurde gewaehlt.}%
  \fi
\fi

\ifdefined\tah@randausgleich
  \typeout{Paket tah Meldung: Die Option `randausgleich' wurde gewaehlt.}
  \RequirePackage{microtype}
\fi

\ifdefined\tah@tabellen
  \typeout{Paket tah Meldung: Die Option `tabellen' wurde gewaehlt.}
  \RequirePackage{tabularx}
  \RequirePackage{ragged2e}
  \RequirePackage{dcolumn}
  \RequirePackage{booktabs}
  \newcolumntype{L}{>{\RaggedRight\hspace{0pt}\arraybackslash}l}
  \newcolumntype{Y}{>{\RaggedRight\hspace{0pt}\arraybackslash}X}
  \newcolumntype{d}[1]{>{\DC@{.}{,}{#1}}l<{\DC@end}}
\fi

\endinput

我不建议加载该pdfsync软件包:如今 SyncTeX 技术已经好多了。与其使用功能更强大的软件包,不如使用pdfcprot其他更强大的microtype软件包。

相关内容