![Reledmac - 任意段落编号/标签?](https://linux22.com/image/458672/Reledmac%20-%20%E4%BB%BB%E6%84%8F%E6%AE%B5%E8%90%BD%E7%BC%96%E5%8F%B7%2F%E6%A0%87%E7%AD%BE%EF%BC%9F.png)
我用 Reledmac 编辑同一篇文章的两个不同版本。我把它们都作为独立的文本进行编辑,而不是让其中一个版本成为另一个版本的组成部分。两个版本中的一个版本偶尔会有一些段落是另一个版本所缺失的。
我希望能够为这些段落赋予不同于正常段落编号的标签 - 例如,如果版本 a 在第 1 段之后有一个段落,而版本 b 没有,我希望能够将此段落称为 1a。我试过,\setcounter{pstart}{value}
但它只接受数字作为值;我也试过用 替换\numberpstarttrue
,\labelpstarttrue
放在\label{1a}
各个地方,但似乎没有在任何地方打印标签。
梅威瑟:
\documentclass[12pt, twoside]{book}
\usepackage{reledmac}
\begin{document}
\numberpstarttrue
\beginnumbering
\pstart
This is paragraph 1.
\pend
\pstart
I would like to call this paragraph 1a.
\pend
\pstart
And then this would be paragraph 2.
\pend
\endnumbering
\end{document}
有没有办法做到这一点?
提前致谢!
答案1
这是我的解决方案自动化为您编号(和标签)。
在任何需要特殊标记的段落之前,您可以发出新命令\specialpar
。
此命令停止常规编号(不在计数器上加 1 pstart
),而是推进一个新计数器pstartletter
,然后以字母格式实现(“a”)。
然后,我们声明\thepstart
应该始终打印数字和字母(如果适用)。这意味着我们在段落开头以及在其他地方引用它时都会得到“1a”。
在对计数器和相关命令进行操作时,切勿破坏标签/引用机制。在我的示例中,我添加了选项\labelpstarttrue
和包hyperref
,以及\label{}
s,以证明重新定义与之完美契合。请注意这不是必需的找到解决方案。
\thepstart
这也是为什么我没有像 那样直接在 的定义中包含数字分隔符(“1a” 后面的点和空格)reledmac.sty
。我们希望它位于段落开头,当然:
1a._Lorem ipsum...
但我们不想\ref{label}
总是强迫自己使用点和空格,因为这可能会弄乱我们写作的标点符号:
请参阅文件 A 中缺少的段落 1a._...
(不过这只是一个建议,从技术上来说这并不是绝对必要的,是否采用取决于你。)
当特殊段落(或段落组)结束时,您可以发出\normalpar
。计数器pstartletter
将重置为 0,并且仅显示常规数字。
\documentclass{article}
\usepackage{reledmac}
\numberpstarttrue
\newcounter{pstartletter}
\newcommand{\specialpar}{\addtocounter{pstart}{-1}\stepcounter{pstartletter}}
\newcommand{\normalpar}{\setcounter{pstartletter}{0}}
\makeatletter
\renewcommand{\thepstart}{{\bfseries\@arabic\c@pstart\@alph\c@pstartletter}} % no dot, for better format in label-ref
%\renewcommand{\thepstart}{{\bfseries\@arabic\c@pstart\@alph\c@pstartletter}. } % dot included, as in reledmac.sty
\makeatother
\appto{\pstart}{. } % for better format in label-ref
\labelpstarttrue % for demonstration purposes
\usepackage[colorlinks]{hyperref} % for demonstration purposes
\begin{document}
\beginnumbering
\pstart
\label{p1}A shared paragraph, no. \ref{p1}.
\pend
\specialpar % Execute this code before every "special" paragraph
\pstart
\label{p1a}This is an extra paragraph, no. \ref{p1a}.
\pend
\specialpar % Execute this code before **every** "special" paragraph
\pstart
\label{p1b}This is another extra paragraph, no. \ref{p1b}.
\pend
\normalpar % Execute this code at the end of **a group of** "special" paragraphs
\pstart
\label{p2}A shared paragraph again, no. \ref{p2}.
\pend
\pstart
\label{p3}A shared paragraph, no. \ref{p3}.
\pend
\specialpar
\pstart
\label{p3a}This is one more extra paragraph, \ref{p3a}.
\pend
\normalpar
\pstart
\label{p4}A shared paragraph again, no. \ref{p4}.
\pend
\endnumbering
\end{document}
编辑
我现在意识到你没有明确要求自动编号段落。您要求一种随意更改段落标签的方法。很抱歉我仓促下结论!
您仍然可以使用上述框架并pstartletter
手动设置第二个标签()。不要使用命令\specialpar
和\normalpar
,而是在相关段落之前和之后使用以下组合:
\addtocounter{pstart}{-1}\setcounter{pstartletter}{1} % use 1 for a, 2 for b...
\pstart
This is my paragraph.
\pend
\setcounter{pstartletter}{0}