我正在用 LaTeX 写一本书,想通过在章节标题旁边的空白处放置一个菱形来标记某些章节、小节和小小节“较难”(也许是为了方便读者在第一次阅读时跳过)。我的尝试(如下)毫不奇怪地将菱形放在了章节标题内的任何数字之后,我不喜欢这种外观。
\documentclass{article}
\newcommand*{\hardsec}{%
\mbox{$\diamondsuit$}
}
\setcounter{secnumdepth}{2}
\begin{document}
\section{The first section}
\subsection{Beginnings}
This bit is for all-comers.
\subsection{\hardsec Harder stuff}
Here's some harder stuff
\section{\hardsec The second section}
This entire section is so hard it's in Latin. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\section{The third section}
\subsection{Middlings}
Bits of this subsection are accessible.
\subsubsection{For everyone}
This part is, for example.
\subsubsection{\hardsec For the (self-)chosen few}
But this part is tricky
\end{document}
我怎样才能(a)将菱形移动到边缘(最好不编辑发布者的 .cls 文件来定义部分标题的样式)(b)使用更令人愉悦的填充菱形符号(可能像用来表示 stackexchange 用户列表上的版主的菱形符号?)
答案1
您可以根据现有的命令定义新的分段命令,例如\hardsec
,\hardsubsec
和\hardsubsubsec
\makeatletter
\newcommand\hardsec{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\newcommand\hardsubsec{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\newcommand\hardsubsubsec{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\makeatother
并在需要时使用它们来代替常规的分段命令。
梅威瑟:
\documentclass{article}
\usepackage{lipsum}
\makeatletter
\newcommand\hardsec{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\newcommand\hardsubsec{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\newcommand\hardsubsubsec{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries\noindent\llap{$\diamondsuit$\hspace*{1em}}}}
\makeatother
\begin{document}
\section{Not hard}
\lipsum[1]
\hardsec{Hard section}
\lipsum[1]
\hardsubsec{Hard subsection}
\lipsum[1]
\section{Not hard}
\lipsum[1]
\end{document}
输出
答案2
我建议定义传统\section
命令的变体,以使代码更具可读性(而不是将标记添加为部分标题的一部分)。如果您希望更改语法,它还将允许您稍后进行修改。
\documentclass{article}
\usepackage{xparse,amssymb}
\makeatletter
\NewDocumentCommand{\hardsection}{s o m}{{%
\renewcommand{\@seccntformat}[1]{\hardsec\csname the##1\endcsname\quad}%
\IfBooleanTF{#1}
{% \hardsection*
\IfNoValueTF{#2}
{\section*{#3}}% \hardsection*{..}
{\section*[#2]{#3}}% \hardsection*[..]{..}
}
{% \hardsection
\IfNoValueTF{#2}
{\section{#3}}% \hardsection{..}
{\section[#2]{#3}}% \hardsection[..]{..}
}
}}
\NewDocumentCommand{\hardsubsection}{s o m}{{%
\renewcommand{\@seccntformat}[1]{\hardsec\csname the##1\endcsname\quad}%
\IfBooleanTF{#1}
{% \hardsubsection*
\IfNoValueTF{#2}
{\subsection*{#3}}% \hardsubsection*{..}
{\subsection*[#2]{#3}}% \hardsubsection*[..]{..}
}
{% \hardsubsection
\IfNoValueTF{#2}
{\subsection{#3}}% \hardsubsection{..}
{\subsection[#2]{#3}}% \hardsubsection[..]{..}
}
}}
\newcommand*{\hardsec}{\llap{\hardsecsymbol\hspace{\hardsecspace}}}
\newcommand{\hardsecsymbol}{$\blacklozenge$}
\newlength{\hardsecspace}\setlength{\hardsecspace}{20pt}
\makeatother
\setcounter{secnumdepth}{2}
\begin{document}
\section{The first section}
\subsection{Beginnings}
This bit is for all-comers.
\hardsubsection{Harder stuff}
Here's some harder stuff
\hardsection{The second section}
This entire section is so hard it's in Latin. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\section{The third section}
\subsection{Middlings}
Bits of this subsection are accessible.
\subsubsection{For everyone}
This part is, for example.
\subsubsection[abc]{\hardsec For the (self-)chosen few}
But this part is tricky
\end{document}
上述定义\hardsection
(及其相关内容)调整了\@seccntformat
部分标题编号的印刷机制。假设出版商可能会更改部分定义的外围部分,但可能保持\@seccntformat
不变——这对于使上述建议发挥作用至关重要。
的插入\hardsec
是字体特定的,因此您会看到它根据您是否有\hardsection
或进行调整\hardsubsection
。这可能不是理想的,但可以改变。此外,不要使用字体特定的间距 ,而是使用oin\hardsecspace
中的固定间距。当然,还存在其他对齐选项。p
t
这xparse
定义的作用\hardsection
是让您完全控制事物的处理方式。新命令的内容被分组,使得重新定义成为\@seccntformat
临时的。
amssymb
提供\blacklozenge
类似于主持人的功能。
答案3
scalerel
带有和包的解决方案titlesec
。我定义了一个hard
环境,该环境定义了一个标记,该标记在此环境之外为空。
\documentclass[[a4paper, x11names]{article}
\usepackage[explicit]{titlesec}
\usepackage{graphicx, xcolor, scalerel}
\usepackage{mathtools}
\titleformat{\section}{\Large\normalfont\bfseries}{\llap{\secmark}\arabic{section}.}{.5em}{#1}
\newcommand{\secmark}{}
\newenvironment{hard}{\renewcommand{\secmark}{%
\stretchrel*{\color{Coral3}\boldsymbol\diamond}{\thesection}\hskip0.333em}
}%a
{}
\begin{document}
\section{A normal section}
This section can be skipped since it’s quite easy.
\begin{hard}
\section{A harder section}
This one can be skipped on first reading.
\end{hard}
\section{Another normal section}
You can read it if you insist.
\end{document}
答案4
您可以简单地将\everypar
其用作。例如,\hard
将是用作的“前缀” \hard\section{...}
,\hard\subsection{...}
等等。
\def\hard{\everypar={\llap{$\diamondsuit$\quad}\global\everypar={}}}
你不需要更多了。