使用 titlesec 和 extramarks 有条件地设置标题内容时出现问题

使用 titlesec 和 extramarks 有条件地设置标题内容时出现问题

我正在写一篇关于古典文本的评论,并试图模仿许多布局选择剑桥希腊文和拉丁文经典系列。特别是,我一直在努力让标题指定该页面上讨论了哪些文本行,例如评论:13-17。

使用中的功能标题安全标题extramarkstopextramarks主要botextramarks是),我大部分都已经完成了,但我遇到了一个无法修复的极端情况。极端情况是某些页面可能只有一行评论。照目前的情况来看,我的代码将给出一个标题,例如,评论:3-3。

所以我想做的(我认为)是有一个条件,即“如果页面上的第一个和最后一个行号是相同的,只打印一次;否则,打印从上到下的范围”。但我还无法使任何此类条件发挥作用。

这是我尝试过的:

  • 使用xparseetoolbox创建一个用测试的宏ifnumequal。这无法编译。(我猜是因为宏展开的时间/地点?)

  • 使用ifsamemarkfrom 来titleps测试topextramarks和是否botextramarks对相关的具有相同的值extramark。我可以对其进行编译,但无法给出正确的结果。

下面的最小工作示例在第一行显示了正确的输出,在第二页显示了边缘情况问题。(如何选择显示哪些行的细节有点复杂,可能并不重要,所以我把它们放在了 MWE 下面。)

\documentclass[11pt]{article}
\usepackage{titlesec}
\usepackage[extramarks]{titleps}
\newcounter{firstLine}
\setcounter{firstLine}{1}
\newmarkset{firstLine}
\newextramark*{firstLine}{firstLine}
\usepackage{xparse}
\DeclareDocumentCommand \handleOneArg{m}{
 \setcounter{firstLine}{#1}
 \extramark{firstLine}
 \subsection{#1}
}
\DeclareDocumentCommand \handleTwoArgs{m m}{
 \setcounter{firstLine}{#1}
 \extramark{firstLine}
 \subsection{{#1}--{#2}}
}
\DeclareDocumentCommand \comSubSection{o m}{
 \IfNoValueTF{#1}
  { \handleOneArg{#2} }
  { \handleTwoArgs{#1}{#2} }
}
% Not currently used: a failed attempt to solve my problem.
\usepackage{etextools}
\DeclareDocumentCommand \fixRange{m m} {
 \ifnumequal{#2}{#1}{#1}{#1--#2}
}
% TODO
% I need a way to compare \topextramarks and \botextramarks, so that if they
% are equal, I just print COMMENTARY: 1 and not COMMENTARY: 1--1
\newpagestyle{commentary}{%
 \sethead[]%even-left
  [COMMENTARY:~\topextramarks{firstLine}{\arabic{firstLine}}--%
   \botextramarks{firstLine}{\arabic{firstLine}}]%even-center
  []% even-right
  {}%odd-left
  {COMMENTARY:~\topextramarks{firstLine}{\arabic{firstLine}}--%
   \botextramarks{firstLine}{\arabic{firstLine}}}%even-center
  {}% odd-right
 \setfoot{}%left
  {\thepage}%center
  {}%right
}
\titleformat{\section}{\centering\normalfont\itshape}{}{0em}{}
\titleformat{\subsection}[runin]{\normalfont\bfseries}{}{0em}{}

\usepackage{lipsum}

\begin{document}

\pagestyle{commentary}
\section{1--10 Section Summary}

\lipsum[4]

\comSubSection{1}

\lipsum[10]

\comSubSection[1]{4}

\lipsum[20]

\comSubSection{2}

\lipsum[2]

\comSubSection[3]{7}

\lipsum[8]

\comSubSection[3]{5}

\lipsum[2]

\end{document}

有关行号对标题重要的详细信息:

  • 相关行号来自我文档中的小节。小节用于包含较长文本块和简短介绍。
  • 小节可以是单行或多行范围内的注释:例如 4 或 4-8。
  • 如果小节指定了一个范围,那么重要的数字是首先。因此,如果在页面顶部,第 5-10 行有注释,而在页面底部,第 7-9 行有注释,则页眉应这样显示:注释:5-7。
  • 如果 (a) 页面只在一行上发表评论,或 (b) 给定页面的第一条评论和最后一条评论开始在同一行上发表评论(或仅在同一行上发表评论),则标题应包含单个数字。这种极端情况最有可能发生在第一页和最后一页上,并且理论上如果注释很长,则可能发生在任何地方。

答案1

这有点混乱:

\documentclass[11pt]{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\usepackage{titlesec}
\usepackage[extramarks]{titleps}
\newcounter{firstLine}
\setcounter{firstLine}{1}
\newmarkset{firstLine}
\newextramark*{firstLine}{firstLine}
\usepackage{xparse}
\DeclareDocumentCommand \handleOneArg{m}{
  \setcounter{firstLine}{#1}
  \extramark{firstLine}
  \subsection{#1}
}
\DeclareDocumentCommand \handleTwoArgs{m m}{
  \setcounter{firstLine}{#1}
  \extramark{firstLine}
  \subsection{{#1}--{#2}}
}
\DeclareDocumentCommand \comSubSection{o m}{
  \IfNoValueTF{#1}
  { \handleOneArg{#2} }
  { \handleTwoArgs{#1}{#2} }
}
\newcommand*\topfirstLine{\topextramarks{firstLine}{\arabic{firstLine}}}
\newcommand*\botfirstLine{\botextramarks{firstLine}{\arabic{firstLine}}}
\newpagestyle{commentary}{%
  \sethead[]%even-left
  [COMMENTARY:~%
    \edef\tempa{\topfirstLine}\edef\tempb{\botfirstLine}%
    \topfirstLine\ifx\tempa\tempb\relax\else--\botfirstLine\fi]%even-center
  []% even-right
  {}%odd-left
  {COMMENTARY:~%
    \edef\tempa{\topfirstLine}\edef\tempb{\botfirstLine}%
    \topfirstLine\ifx\tempa\tempb\relax\else--\botfirstLine\fi}%even-center
  {}% odd-right
  \setfoot{}%left
  {}%center
  {\thepage}%right
}
\titleformat{\section}{\centering\normalfont\itshape}{}{0em}{}
\titleformat{\subsection}[runin]{\normalfont\bfseries}{}{0em}{}

\usepackage{lipsum}

\begin{document}

  \pagestyle{commentary}
  \section{1--10 Section Summary}

  \lipsum[4]

  \comSubSection{1}

  \lipsum[10]

  \comSubSection[1]{4}

  \lipsum[20]

  \comSubSection{2}

  \lipsum[2]

  \comSubSection[3]{7}

  \lipsum[8]

  \comSubSection[3]{5}

  \lipsum[2]

\end{document}

动态标头

相关内容