在章节标题中标出书中“较难”的内容

在章节标题中标出书中“较难”的内容

我正在用 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中的固定间距。当然,还存在其他对齐选项。pt

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={}}}

你不需要更多了。

相关内容