我是 TeX.SX 的新手,我希望我做的一切都正确。
为了避免“你为什么这样做?”这样的回答,我首先想简要描述一下我想要什么:我正在开发一个基于的类tufte-book
,它实现了\subsubsection
抛出错误。但是,我想\subsubsection
在我的课程中提供。此外,我希望能够使用宏\titleformat
来设置子节的样式,因为tufte-book
使用titlesec
。我的第一次尝试是:
\documentclass{tufte-book}
\makeatletter
% Copy the definition from book.cls
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\makeatother
% The following macro is called at the very end of titlesec.sty.
% If I uncomment it, the latex process runs forever.
%\titleclass{\subsubsection}{straight}[\subsection]
% Without the optional argument, it works...
% However, if you make the following line a comment...
\titleclass{\subsubsection}{straight}
% ... the access to subsubsection using the titlesec API doesn't work anymore
\titleformat{\subsubsection}{%
\fontsize{36}{42}\selectfont%
}{\thesubsubsection}{1em}{}[]
\begin{document}
\subsection{bar}
\subsubsection{foo}
\end{document}
经过一番调查后titlesec.sty
,MWE 可以简化为使用\titleclass
两次相同的调用:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{titlesec}
% runs forever
%\titleclass{\subsubsection}{straight}[\subsection]
% works
\titleclass{\subsubsection}{straight}
% Does not make sense, but works
%\titleclass{\subsubsection}{straight}[\paragraph]
\titleformat{\subsubsection}{%
\fontsize{36}{42}\selectfont%
}{\thesubsubsection}{1em}{}[]
\begin{document}
\subsection{bar}
\subsubsection{foo}
\end{document}
虽然我认为遇到无限循环是发现错误的好兆头,但我既没有找到它,也没有在网上找到有关此问题的任何评论或帖子。我同意\titleclass
两次使用相同的定义是一件晦涩难懂的事情,但它至少应该导致错误而不是无限。有人看到(潜在的)错误或更可能是我的错误吗?
答案1
您不必复制其中的定义book
,而是必须提供忘记的定义titlesec
\documentclass{tufte-book}
\makeatletter
\renewcommand{\subsubsection}{\ttl@straightclass{subsubsection}}
\makeatother
\titleformat{\subsubsection}[hang]
{\fontsize{36}{42}\selectfont}
{\thesubsubsection}
{1em}
{}
[]
\setcounter{secnumdepth}{2}
\begin{document}
\chapter{A}
\section{B}
\subsection{bar}
\subsubsection{foo}
\paragraph{C}
\end{document}
答案2
这两种情况的问题是
\titleclass{\subsubsection}{straight}[\subsection]
尝试\subsection
在插入新\subsubsection
级别之前将下面的部分级别向下移动。解决此问题的一种方法是定义一个具有新名称的级别,例如 ssubsection,然后将其\subsubsection
作为 的副本\ssubsection
;由于可选参数等,您需要使用\LetLtxMacro
同名包来执行此操作:
\documentclass{tufte-book}
\usepackage{letltxmacro}
\titleclass{\ssubsection}{straight}[\subsection]
\newcounter{ssubsection}
\titleformat{\ssubsection}{%
\normalfont\normalsize\bfseries\selectfont%
}{\thessubsection}{1em}{}[]
\titlespacing{\ssubsection}{0pt}{*3.25}{*1.5}
\LetLtxMacro\subsubsection\ssubsection
\begin{document}
\subsection{Bar} Text.
\subsubsection{Foo} Text.
\end{document}