我正在写一篇关于古典文本的评论,并试图模仿许多布局选择剑桥希腊文和拉丁文经典系列。特别是,我一直在努力让标题指定该页面上讨论了哪些文本行,例如评论:13-17。
使用中的功能标题安全和标题(extramarks
,topextramarks
主要botextramarks
是),我大部分都已经完成了,但我遇到了一个无法修复的极端情况。极端情况是某些页面可能只有一行评论。照目前的情况来看,我的代码将给出一个标题,例如,评论:3-3。
所以我想做的(我认为)是有一个条件,即“如果页面上的第一个和最后一个行号是相同的,只打印一次;否则,打印从上到下的范围”。但我还无法使任何此类条件发挥作用。
这是我尝试过的:
使用
xparse
和etoolbox
创建一个用测试的宏ifnumequal
。这无法编译。(我猜是因为宏展开的时间/地点?)使用
ifsamemark
from 来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}