我使用 KOMA 类 (scrbook)。我的目标是:我尝试创建一个命令(比如说 \verset),每次都会显示一个数字,并缩进。标题应该作为参数。例如:
\verset \lipsum
\verset{描述} \lipsum
将显示(Microsoft Word 示例)
问题是我不希望这些数字出现在每个段落的开头,只有当我调用 \verset 时才需要。
另一个困难是,我希望我的参考书目和索引不要发送出现的页码,而是发送诗集的编号。
我对 renewcommand 和 setcounter 的东西确实不太了解。如果能得到一点帮助我将非常感激 :)
答案1
这个要求很容易满足:
\documentclass{article}
\usepackage[nopar]{lipsum} % just for the example
\newcommand{\verset}[1][]{\stepcounter{verset}%
\textbf{\theverset.
\if\relax\detokenize{#1}\relax
\else
#1
\fi
}%
}
\newcounter{verset}
\begin{document}
\lipsum[1]
\verset \lipsum[2]
\verset[Description] \lipsum[3]
\lipsum[4]
\end{document}
如果你只需要一个索引,下面将使用verset编号而不是页码
\documentclass{article}
\usepackage[nopar]{lipsum} % just for the example
\usepackage{imakeidx}
\makeindex
\makeatletter
\AtBeginDocument{\xpatchcmd{\@wrindex}{\thepage}{\theverset}{}{}}
\makeatother
\newcommand{\verset}[1][]{\stepcounter{verset}%
\textbf{\theverset.
\if\relax\detokenize{#1}\relax
\else
#1
\fi
}%
}
\newcounter{verset}
\begin{document}
\lipsum[1]
\verset \lipsum[2]\index{horse}
\verset[Description] \lipsum[3]\index{elephant}
\lipsum[4]\index{lion}
\printindex
\end{document}
如果诗句标题未以标点符号结尾,则添加句点到诗句标题的版本。该amsthm
软件包具有一项\@addpunct
可方便完成此工作的功能。
\documentclass{article}
\usepackage[nopar]{lipsum} % just for the example
\usepackage{imakeidx}
\usepackage{amsthm} % for \@addpunct
\makeindex
\makeatletter
\AtBeginDocument{\xpatchcmd{\@wrindex}{\thepage}{\theverset}{}{}}
\newcommand{\verset}[1][]{\stepcounter{verset}%
\textbf{\theverset.%
\if\relax\detokenize{#1}\relax
\else
\space #1\@addpunct{.}%
\fi
}%
\hspace{0.5em}\ignorespaces
}
\makeatother
\newcounter{verset}
\begin{document}
\lipsum[1]
\verset \lipsum[2]\index{horse}
\verset[Description] \lipsum[3]\index{elephant}
\verset[Period.] Short
\verset[Question?] Short
\lipsum[4]\index{lion}
\printindex
\end{document}
该\@addpunct{.}
宏检查当前空间因子,该因子在标点符号后较大(即使\frenchspacing
有效),并有条件地添加一个句点。