我想在某些部分标签上添加星号。这通常用于表示某个部分是可选的,如下所示:
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}