我目前正在处理一个大型文档,想要添加行号以便校对。我想在每个新章节/节/小节之后重置当前行号。为了实现这一点,我参考了这回答。
现在的问题是,这似乎不能正常工作。数字不会在每个\chapter,\section
或\subsection
命令之后重置,而是在命令之前的段落开头重置。
为了说明这一点:
\documentclass[a4paper, oneside]{book}
\usepackage{polyglossia}
\usepackage{lipsum}
\usepackage{lineno}
\linenumbers
\preto{\chapter}{\resetlinenumber}
\preto{\section}{\resetlinenumber}
\preto{\subsection}{\resetlinenumber}
\usepackage{makeidx}
\makeindex
\begin{document}
\chapter{Chapter one}
\lipsum[5]
\paragraph*{paragraph} \lipsum[5]
\section{Section one}
\lipsum[5]
\paragraph*{paragraph} \lipsum[5]
\subsection{Subsection one}
\lipsum[5]
\paragraph*{paragraph} \lipsum[5]
\chapter{Chapter two}
\lipsum[4]
\paragraph*{paragraph} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ex, lacinia eu blandit in, facilisis ac nisl. Aliquam mauris arcu, porta at mi ac, molestie aliquam justo. Proin lacinia nibh vitae cursus sagittis. Suspendisse potenti. Curabitur facilisis suscipit felis et malesuada. Proin sed turpis odio. Vivamus eleifend urna tempor, pretium lacus quis, pharetra tellus. Morbi sed elementum lectus.
\section{Section two}
\lipsum[5]
\paragraph*{paragraph} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ex, lacinia eu blandit in, facilisis ac nisl. Aliquam mauris arcu, porta at mi ac, molestie aliquam justo. Proin lacinia nibh vitae cursus sagittis. Suspendisse potenti. Curabitur facilisis suscipit felis et malesuada. Proin sed turpis odio. Vivamus eleifend urna tempor, pretium lacus quis, pharetra tellus. Morbi sed elementum lectus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ex, lacinia eu blandit in, facilisis ac nisl. Aliquam mauris arcu, porta at mi ac, molestie aliquam justo. Proin lacinia nibh vitae cursus sagittis. Suspendisse potenti. Curabitur facilisis suscipit felis et malesuada. Proin sed turpis odio. Vivamus eleifend urna tempor, pretium lacus quis, pharetra tellus. Morbi sed elementum lectus.
\subsection{Subsection two}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ex, lacinia eu blandit in, facilisis ac nisl. Aliquam mauris arcu, porta at mi ac, molestie aliquam justo. Proin lacinia nibh vitae cursus sagittis. Suspendisse potenti. Curabitur facilisis suscipit felis et malesuada. Proin sed turpis odio. Vivamus eleifend urna tempor, pretium lacus quis, pharetra tellus. Morbi sed elementum lectus.
\paragraph*{paragraph} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ex, lacinia eu blandit in, facilisis ac nisl. Aliquam mauris arcu, porta at mi ac, molestie aliquam justo. Proin lacinia nibh vitae cursus sagittis. Suspendisse potenti. Curabitur facilisis suscipit felis et malesuada. Proin sed turpis odio. Vivamus eleifend urna tempor, pretium lacus quis, pharetra tellus. Morbi sed elementum lectus.
\end{document}
笔记:
- 文本形式的“Lorem ipsum”是故意的,如果我使用
\blindtext
或类似的东西,就不会发生错误。 - 我正在使用 XeLaTeX。
我不确定为什么会发生这种情况,但如果能提供任何帮助来解决问题,我将不胜感激。
答案1
按照要求 :)
我想象问题出在段落中断上,因为你说过:
如果我使用
\blindtext
或类似的东西,错误不会发生
lipsum
默认情况下,该包会\par
在每个段落后插入一个标记,因此会出现段落中断。事实上,如果您\usepackage[nopar]{lipsum}
(隐藏该\par
标记),命令也会发生错误\lipsum
。
还因为你说过:
数字不会在每个
\chapter
、\section
或\subsection
命令之后重置,而是在命令之前的段落开头重置。
分段命令会\par
在您使用时插入一个标记,但您的\resetlinenumber
插入前因为\preto
pre
挂起了to
命令。这样,\resetlinenumber
指令在 之前就被看到了\par
,所以编号重置的时间恰好早了一个段落。
最后,因为许多问题是由于段落构建过程而发生的:)
当你输入一堆文本时,TeX 会将其作为一行文本存储在内存中。然后,只有当它看到一个\par
(或一个空行)时,它才会将这一长段文本分成几行。当然,它lineno
需要这些行来知道如何对事物进行编号。
这就是为什么很多看似微不足道的东西都依赖于换行的位置,但却不那么容易工作。TeX 不允许你在段落被分成行之后做任何事情(除非你使用 LuaTeX)。
为了确保我们可以尝试使用较小的文档。这将包含从 1 到 12 的行号:
\documentclass{article}
\usepackage{lineno}
\begin{document}
\linenumbers
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\resetlinenumber
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{document}
而这将有两组编号为 1 至 6 的行:
\documentclass{article}
\usepackage{lineno}
\begin{document}
\linenumbers
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\resetlinenumber
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{document}
唯一的区别是\par
和的相对位置\resetlinenumber
:)
TL; DR
您可以简单地\par
在之前添加一个\resetlinenumber
:
\preto{\chapter}{\par\resetlinenumber}
\preto{\section}{\par\resetlinenumber}
\preto{\subsection}{\par\resetlinenumber}