如何在章节标签旁边放置星号?

如何在章节标签旁边放置星号?

我想在某些部分标签上添加星号。这通常用于表示某个部分是可选的,如下所示:

1.1* 可选部分

这是我的解决方案:

\documentclass{report}
\usepackage{amsmath}
\begin{document}

\renewcommand*\thesection{\arabic{chapter}.\arabic{section}*}
\section{Optional Section}
\renewcommand*\thesection{\arabic{chapter}.\arabic{section}}
\section{Required Section}

\end{document}

这个解决方案会引起任何问题吗?有没有更好的方法?

对于我的文档,thesection仅用于章节标题,因此不会导致定理编号等问题。但是,其他人可能想知道如何解决这个问题。

答案1

正如 Bernard 在评论中提到的,解决方案可以在文档的第 4.3 节中找到titlesec。以下是解决方案的一个示例:

\documentclass{report}
\usepackage{amsmath}
\usepackage{titlesec}

\newcommand{\secmark}{}
\newenvironment{advanced}
  {\renewcommand{\secmark}{*}}
  {}

\titleformat{\section}
  {\large\bfseries} % Format of the title
  {\thesection\secmark} % Label
  {1em} % Separation between label and title body 
        % (default = horizontal space, display = vertical space)
  {} % Code preceding the title

\begin{document}

\begin{advanced}
\section{Optional Section}
Content.    
\end{advanced}

\section{Required Section}
Content. 

\end{document}

答案2

对于使用 KOMA 课程的人来说,可以做类似的事情

\renewcommand{\sectionformat}{%
    \thesection%
    \texorpdfstring{\rlap{\ensuremath{^{\bstar}}}}{}%
    \autodot\enskip%
}%

答案3

这应该适用于所有类。这个想法是调用

\advanced\section

对于特殊部门单位(任何级别,只要有编号)。

怎么做的?当\advanced\section后面跟着时, 的含义被保存下来,并在末尾\thesection添加修改。标题排版后, 的含义又恢复了。\advancedmarker\thesection

\advancedmarker命令在打印章节标题和目录时会打印零宽度星号,但在所有其他情况下都会打印正常星号。

附加功能:如果不想\ref使用星号,只需将定义更改\advancedmarker

\NewDocumentCommand{\advancedmarker}{}
 {
  \bool_if:NT \__advanced_killwidth_bool { \makebox[0pt][l]{*} }
 }

并且\ref{test}不会打印任何星号。

完整的代码。

\documentclass{report}

\ExplSyntaxOn
\NewDocumentCommand{\advanced}{mO{#3}m}
 {% #1 is a sectioning command
  % save the current meaning of \the<level>
  \cs_set_eq:Nc \__advanced_save: { the \cs_to_str:N #1 }
  % add \advancemarker
  \cs_set:cpn { the \cs_to_str:N #1 } { \__advanced_save: \advancedmarker }
  \bool_set_true:N \__advanced_killwidth_bool
  #1[#2]{#3}
  \bool_set_false:N \__advanced_killwidth_bool
  % reset \the<level> to the previous meaning
  \cs_set_eq:cN { the \cs_to_str:N #1 } \__advanced_save:
 }
\NewDocumentCommand{\advancedmarker}{}
 {
  \bool_if:NTF \__advanced_killwidth_bool { \makebox[0pt][l]{*} } { * }
 }

\bool_new:N \__advanced_killwidth_bool

\AddToHook{cmd/@starttoc/begin}{\bool_set_true:N \__advanced_killwidth_bool}
\ExplSyntaxOff


\begin{document}

\tableofcontents

\chapter{Test}

Beware that \ref{test} is a difficult section.

\section{This is a normal section}

\advanced\section{This is an optional advanced section}\label{test}

\section{This is a normal section}

\subsection{With a normal subsection}

\advanced\subsection{And an advanced subsection}

\subsection{And a normal subsection}

\advanced\chapter{A difficult chapter}

\end{document}

目录

在此处输入图片描述

第一章(标准)

在此处输入图片描述

第二章(高级)

在此处输入图片描述

相关内容