我如何访问短节内容以避免重复?

我如何访问短节内容以避免重复?

我经常使用简短的章节名称进行样式设置。我希望简短名称出现在页眉中,而较长的名称仅出现在文档本身中。

我已经解决了这个问题,但这需要大量重复信息。例如:

\section[1--10]{1--10 Proem and summary}
...
\section[11--20]{11--20 The adventure begins}

我想知道是否有办法重写文档中各部分的打印输出,以便同时打印短部分名称和长部分名称,而不是1--10每次都重复(或等效重复),这既繁琐又容易出错。

% I'd like this to print "1-10 Proem and summary" in the document itself.
\section[1--10]{Proem and summary}

下面我附上了一个最小的工作示例,其中包含我迄今为止所做的其他样式。

\documentclass[11pt]{article}
\usepackage{fontspec}
\setmainfont[Ligatures={Common,TeX}]{Times New Roman}
\setmainfont{Times New Roman}
\usepackage{titlesec}
\titleformat{\section}{\centering\normalfont\itshape}{}{0em}{}
\titleformat{\subsection}[runin]{\normalfont\bfseries}{}{0em}{}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\setlength{\headheight}{15pt}
\renewcommand{\sectionmark}[1]{\markright{Commentary: {#1}}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\lhead{\nouppercase{\fancyplain{}{\rightmark}}}
\rfoot{\nouppercase{\thepage}}
\usepackage{lipsum}

\begin{document}

\section[1--10]{1--10 Proem}

\lipsum

\section[11--55]{11--55 Something else}

\lipsum

\section[56--100]{56-100  Another thing}

\lipsum


\end{document}

我怀疑titlesec可以做到这一点,但我还不知道该怎么做。

答案1

这里有一种方法可以做到这一点,即重新定义部分命令,以便

\section[55]{标题}

如果前一节的格式为“*--10 其他标题”,则将创建一个节标题“11--55 标题”。没有错误检查来确保新节号大于旧节号,尽管这并不难做到。

下面的 MWE 的第二页如下所示:

在此处输入图片描述

实际代码如下:

\documentclass{article}
\usepackage{mwe}% mwe and geometry used just for MWE
\usepackage[textheight=40mm]{geometry}

\pagestyle{headings}% turn page headings on
\setcounter{secnumdepth}{0}% turn off section numbers

\let\realSection=\section% save the "real" section so that we can use it after we change it
\newcounter{RunningSection}% for counting our pseudo sections
\newcommand\mysection[2][\relax]{% overwriting the section command
  \refstepcounter{RunningSection}% increment running sections
  \xdef\tempSec{\arabic{RunningSection}}%
  \ifx\relax#1\relax\addtocounter{RunningSection}{1}% if no default argument: X--X
  \else\setcounter{RunningSection}{#1}%
  \fi%
  \xdef\tempSec{\tempSec--\arabic{RunningSection}}%
  \realSection[\tempSec]{\tempSec\space#2}%
}
\let\section=\mysection
\renewcommand{\sectionmark}[1]{\markright{Commentary: {#1}}}% set section marks

\begin{document}

  \section[10]{Proem}
  \lipsum[1]

  \section[55]{Something else}
  \lipsum[2]

  \section{Something different}% with no optional argument increment by 1
  \lipsum[3]

  \section[100]{Another thing}
  \lipsum[4]

\end{document}

编辑(使用 titlesec)

如果您想使用它,请在新宏之前titlesec插入命令,然后在参考书目之前插入以下行:titlesec\section

\let\section=\realSection

这使得 section 命令恢复到其通常含义,所以一切都很好。更详细地说:

\documentclass{article}
\usepackage{mwe}% mwe and geometry used just for MWE

\pagestyle{headings}% turn page headings on
\setcounter{secnumdepth}{0}% turn off section numbers

\usepackage{fontspec}
\setmainfont[Ligatures={Common,TeX}]{Times New Roman}
\setmainfont{Times New Roman}
\usepackage{titlesec}
\titleformat{\section}{\centering\normalfont\itshape}{}{0em}{}
\titleformat{\subsection}[runin]{\normalfont\bfseries}{}{0em}{}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\setlength{\headheight}{15pt}
\renewcommand{\sectionmark}[1]{\markright{Commentary: {#1}}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\lhead{\nouppercase{\fancyplain{}{\rightmark}}}
\rfoot{\nouppercase{\thepage}}

\let\realSection=\section% save the "real" section so that we can use it after we change it
\newcounter{RunningSection}% for counting our pseudo sections
\newcommand\mysection[2][\relax]{% overwriting the section command
  \refstepcounter{RunningSection}% increment running sections
  \xdef\tempSec{\arabic{RunningSection}}%
  \ifx\relax#1\relax\addtocounter{RunningSection}{1}% if no default argument: X--X
  \else\setcounter{RunningSection}{#1}%
  \fi%
  \xdef\tempSec{\tempSec--\arabic{RunningSection}}%
  \realSection[\tempSec]{\tempSec\space#2}%
}
\let\section=\mysection
%\renewcommand{\sectionmark}[1]{\markright{Commentary: {#1}}}% set section marks

\begin{document}

  \section[10]{Proem}
  \lipsum[1]

  \section[55]{Something else}
  \lipsum[2]

  \section{Something different}% with no optional argument increment by 1
  \lipsum[3]

  \section[100]{Another thing}
  \lipsum[4]

  \let\section=\realSection
  \begin{thebibliography}{100}
    \bibitem{AJS}
    {\sc H.~H. Andersen, J.~C. Jantzen, and W.~Soergel}, {\em Representations of
      quantum groups at a {$p$}th root of unity and of semisimple groups in
      characteristic {$p$}: independence of {$p$}}, Ast\'erisque, 1994, 321.
  \end{thebibliography}

\end{document}

如果你需要多次将这些“花哨部分”更改回正常部分,那么你可以使用

\let\section=\realSection
... % normal sections
\let\section=\mysection
.... % fancy sections
\let\section=\realSection
... % normal sections
... etc

编辑 II(一种简单的方法)

最后,计算是为了让用户更容易操作。由于 OP 不喜欢这样,这里有一个更简单的解决方案:

\let\realSection=\section
\newcommand\mysection[2][]{%
  \realSection[#1]{#1 #2}%
}
\let\section=\mysection

这用作

 \section[1--10]{Proem}

并且您需要\let\section=\realSection在参考书目等之前写下。

相关内容