如何拥有类似 amsart 的子部分样式

如何拥有类似 amsart 的子部分样式

如果你使用amsart类,那么它会在小节标题后添加一个句号,但如果没有标题则不会。例如,如果我写

\subsection{Title}
Blah1
\subsection{}
Blah2

然后amsart产生

0.1。标题。布拉1

0.2. Blah2

我尝试使用 titlesec 包在文章类中实现这一点,但到目前为止,我可以让句号始终出现或从不出现。因此,使用与上述相同的编码,我得到

0.1。标题。布拉1

0.2。布拉2

(请注意 0.2 后面的额外句号)或

0.1。标题布拉1

0.2. Blah2

是否有人知道如何仅在有标题的情况下才在小节标题后面显示句号?

答案1

在以下示例中,我使用了条件条件包中定义了一个用户命令,借助于\@ifmtarg,用于测试空宏参数(将处理零个或多个空格);explicittitlesec 选项用于使用来控制标题#1;在内部执行空性测试\titleformat

\documentclass{article}
\usepackage{ifmtarg}
\usepackage[explicit]{titlesec}

\makeatletter
\newcommand\titleempty[1]{\@ifmtarg{#1}{}{#1.}}
\makeatother

\titleformat{\subsection}[runin]
  {\normalfont\large\bfseries}{\thesubsection}{1em}{\titleempty{#1}}

\begin{document}

\subsection{Test Section} test text
\subsection{ } test text

\end{document}

在此处输入图片描述

答案2

使用以下方法可以实现titlesecexplicit选择:

在此处输入图片描述

\documentclass{article}
\usepackage[explicit]{titlesec}% http://ctan.org/pkg/titlesec
\makeatletter
\titleformat{\subsection}[runin]{\large\bfseries}{}{0pt}{%
  \setbox0=\hbox{\ignorespaces#1\unskip}%
  \thesubsection\quad\ifdim\wd0>\z@\relax#1.\fi%
  }
\makeatother
\begin{document}
\section{Title}
\subsection{Title} Blah
\subsection{} Blah
\end{document}

explicit允许您使用#1将参数放置到\subsection。但是,它还*从混合中删除了 -variant 的简单使用。不确定这是否是必需的。

上述操作将\subsection标题设置在框 0 中,测试其宽度(以查看它是否为空,如果不为空,则将标题设置为句点。因此,以句点结尾的标题当然会导致双句点。这会\@addpunct有所帮助。


这是另一种选择etoolbox

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\patchcmd{\@sect}% <cmd>
  {#8}% <search>
  {\setbox0=\hbox{\ignorespaces#8\unskip}\usebox0\ifnum2=#2\ifdim\wd0>\z@.\fi\fi}% <replace>
  {}{}% <success><failure>
\makeatother
\begin{document}
\section{Title}
\subsection{Title} Blah
\subsection{ } Blah
\end{document}

它遵循与上述相同的方法,但直接修复了最终的分段调用。条件\ifnum#2=2指的是\subsection级别(级别 2)。对于所有其他部分,不添加标点符号。

相关内容