classicthesis 和 enumitem:如果未指定 pdfspacing 选项,则描述列表将无法编译

classicthesis 和 enumitem:如果未指定 pdfspacing 选项,则描述列表将无法编译

该代码无法编译:

\documentclass[12pt,a4paper]{book}

\usepackage[]{classicthesis}
\usepackage{enumitem}

\begin{document}
\begin{description}
\item[hello] Hi
\item[what] why
\end{description}
\end{document}

以下是日志的相关部分:

!缺少数字,视为零。} l.8 \item[hello] Hi 这里应该有一个数字;我0'. (If you can't figure out why I needed to see a number, look up在 The TeXbook 索引中插入了“奇怪的错误”。)

以下代码可以编译,但不会出错:

\documentclass[12pt,a4paper]{book}

\usepackage[pdfspacing]{classicthesis}
\usepackage{enumitem}

\begin{document}
\begin{description}
\item[hello] Hi
\item[what] why
\end{description}
\end{document}

这是一个 classicthesis 错误吗?

我有 miktex-tex-bin 3.14159265 classicthesis 4.2 enumitem 3.5.2 koma-script 3.24

答案1

嗯,这实际上不是一个错误(尽管代码可以更好)只是两个包重新定义了同一件事(描述标签格式)并且相互绊倒。

classicthesis定义描述标签格式

% descriptionlabels
   \renewcommand{\descriptionlabel}[1]{%
   \hspace*{\labelsep}\spacedlowsmallcaps{#1}} % spacedlowsmallcaps textit textsc    

您的示例中的字符列表\spacedlowsmallcaps来自哪里?soulhello

enumitem在那时添加了格式化钩子(因为这是该包的设计目的),#1所以

\enit@align {\enit@format {hello}}

因此当soul尝试遍历它看到的每个标记\enit@align而不是时h

pdfspacing选项告诉classicthesis使用microtype而不是soul字母间距,这在这种情况下似乎是一个合理的解决方法。

相关内容