如何在类文件中使用 babel 替换来解析宏?

如何在类文件中使用 babel 替换来解析宏?

我试图编写一个简单的类,但遇到了以下问题:我需要编写一些包含德文引号的文本,这些文本是静态的,因此应该默认由该类排版。

您可以在下面的 MWE 中看到,在document环境中我可以使用“和”"'来实现正确的标记。在类文件中它不起作用。我只能使用\glqq\grqq才能正确。

有没有办法可以正确启动它,或者如果没有类文件中的明确宏,这是否根本不可能?

文件如下myclass.cls

\LoadClass[a4paper,10pt]{scrartcl}
\RequirePackage[ngerman]{babel}
\newcommand{\abc}{"`abc"' \glqq abc \grqq}

下面是主要的 tex 文件:

\documentclass{myclass}
\begin{document}
"`abc"' \glqq abc \grqq

\abc
\end{document}

答案1

的最新版本babel允许该选项KeepShorthandsActive,因此您可以说

\LoadClass[a4paper,10pt]{scrartcl}
\RequirePackage[KeepShorthandsActive,ngerman]{babel}
\newcommand{\abc}{"`abc"'}

但这会导致一些问题,因为在序言中加载的包会受到活动包的影响"

你可以使用

\shorthandon{"}
\newcommand{\abc}{"`abc"'}
\shorthandoff{"}

就像建议的那样babel 简写 "| 在宏中不起作用但您可以利用类文件中的事实,从而能够使用@-commands。简写列表位于ngermanb.ldf

\declare@shorthand{ngerman}{"a}{\textormath{\"{a}\allowhyphens}{\ddot a}}
\declare@shorthand{ngerman}{"o}{\textormath{\"{o}\allowhyphens}{\ddot o}}
\declare@shorthand{ngerman}{"u}{\textormath{\"{u}\allowhyphens}{\ddot u}}
\declare@shorthand{ngerman}{"A}{\textormath{\"{A}\allowhyphens}{\ddot A}}
\declare@shorthand{ngerman}{"O}{\textormath{\"{O}\allowhyphens}{\ddot O}}
\declare@shorthand{ngerman}{"U}{\textormath{\"{U}\allowhyphens}{\ddot U}}
\declare@shorthand{ngerman}{"e}{\textormath{\"{e}}{\ddot e}}
\declare@shorthand{ngerman}{"E}{\textormath{\"{E}}{\ddot E}}
\declare@shorthand{ngerman}{"i}{\textormath{\"{\i}}%
                              {\ddot\imath}}
\declare@shorthand{ngerman}{"I}{\textormath{\"{I}}{\ddot I}}
\declare@shorthand{ngerman}{"s}{\textormath{\ss}{\@SS{}}}
\declare@shorthand{ngerman}{"S}{\SS}
\declare@shorthand{ngerman}{"z}{\textormath{\ss}{\@SS{}}}
\declare@shorthand{ngerman}{"Z}{SZ}
\declare@shorthand{ngerman}{"`}{\glqq}
\declare@shorthand{ngerman}{"'}{\grqq}
\declare@shorthand{ngerman}{"<}{\flqq}
\declare@shorthand{ngerman}{">}{\frqq}
\declare@shorthand{ngerman}{"-}{\nobreak\-\bbl@allowhyphens}
\declare@shorthand{ngerman}{"|}{%
  \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
              \allowhyphens}{}}
\declare@shorthand{ngerman}{""}{\hskip\z@skip}
\declare@shorthand{ngerman}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
\declare@shorthand{ngerman}{"=}{\penalty\@M-\hskip\z@skip}

例如,"a在类宏中,你可以说\"{a}\allowhyphens,而不是,"-你可以使用

\nobreak\-\bbl@allowhyphens

请注意,\textormath在想要使用的类宏中,替代方法是无用的"a

可能babel应该使用间接方法(现在的内存问题少多了)。我认为应该说

\def\bbl@ngerman@quotehyphen{\nobreak\-\bbl@allowhyphens}

进而

\declare@shorthand{ngerman}{"-}{\bbl@ngerman@quotehyphen}

因为"a它应该有

\def\bbl@ngerman@quotea@text{\"{a}\allowhyphens}
\def\bbl@ngerman@quotea@math{\ddot a}

\declare@shorthand{ngerman}{"a}{%
  \textormath{\bbl@ngerman@quotea@text}{\bbl@ngerman@quotea@math}%
}

这将使课堂编写者能够更轻松、更清晰地访问非简写版本。

相关内容