我想在标题下方的右侧显示章节编号。我想到了以下最小工作示例:
\documentclass{article}
\usepackage{titlesec}
\usepackage{marginnote}
\usepackage{lipsum} % for dummy text only
\titleformat{\section}[block]{\LARGE\selectfont}{}{0em}{}[\marginnote{\Huge\thesection}]
\begin{document}
\section{First section with\\linebreak}
\lipsum[2]
\section*{Unnumbered}
\lipsum[12]
\section{Three}
\lipsum[5]
\end{document}
但是未编号部分现在编号为 1。我如何才能抑制\thesection
未编号部分?当我将移动\marginnote
到数字<label>
中的字段时\titleformat
,会“忽略”标题包含换行符并且相对于第一行定位。
编辑:例如,这是我为本章编写的代码。使用您的解决方案(无需任何操作即可运行)时\if
,我收到错误“ \begin{document} missing
”。
\titleformat{\chapter}[block]{\fontsize{40}{10}}{}{0em}{#1}[
\begin{textblock}{2}(13.7,3.2)
\color[rgb]{0.39453,0.48047,0.511719} % Error Happens Here
\thechapter
\end{textblock}
]
当我在块周围添加 \if 时,错误就消失了。
\titleformat{\chapter}[block]{\fontsize{40}{10}}{}{0em}{#1}[
\iftrue{
\begin{textblock}{2}(13.7,3.2)
\color[rgb]{0.39453,0.48047,0.511719} % No Error Happens with if
\thechapter
\end{textblock}
}
\fi
]
答案1
我会选择一种语义上更清晰的解决方案。titlesec
提供为无数部分指定不同样式的选项。
复制您的原始命令,指定numberless
,删除您不想显示的内容(如章节编号),您就完成了!
\usepackage[explicit]{titlesec}
% Regular sections:
\titleformat{\section}[block]{\LARGE\selectfont}{}{0em}{}[\marginnote{\Huge\thesection}]
% ...etc
% Numberless sections:
\titleformat{name=\section,numberless}[block]{\LARGE\selectfont}{}{0em}{#1}
% ...etc
答案2
您可以测试*
版本是否正在使用
\makeatletter
\titleformat{\section}[block]{\LARGE\selectfont}{}{0em}{}[\if\ttl@key@numberless\marginnote{\Huge\thesection}\fi]
\makeatother
//对于 \ttl@key@numberless
编号形式,\if
因为相同的字符出现两次,所以为真,而/*
对于未编号部分,所以\if
比较/
和*
为假。