我正在使用书籍类来编写一个包含编号段落的文档。希望(自动递增的)段落编号加粗并居中,然后是下面的文本,并且段落编号带有标签以便引用。使用其他人的建议,我得到了这个函数/命令:
\newcounter{para}
\newcommand\mypara[1]{
\par\refstepcounter{para}\vfill
\begin{center}\textbf{\thepara}\end{center}\label{#1}
}
我在文档中使用它的方式是:
\mypara{myreference}
This is a nice numbered paragraph. I don't want any braces around the paragraph body, if at all possible.
效果很好,除了当我在页面底部附近使用它时,在这种情况下,粗体段落编号可能在一页上,而段落文本可能在下一页上。是否可以避免这样的分页符?如果相关的话,我也在使用 multicols{2}。任何帮助表示感谢。
最小示例:
\documentclass[10pt]{book}
\usepackage{multicol}
\setlength\columnsep{1cm} % sets the distance between columns
\usepackage{blindtext}
\newcounter{para}
\newcommand\mypara[1]{
\par\refstepcounter{para}\vfill
\begin{center}\textbf{\thepara}\end{center}\label{#1}
}
\title{Minimum working example}
\begin{document}
\pagestyle{empty}
% main part of the document:
\mainmatter
\begin{multicols}{2}
\mypara{ref1}
\blindtext
\mypara{ref2}
\blindtext
\mypara{ref3}
\blindtext
\mypara{ref4}
\blindtext
\end{multicols}
\end{document}
答案1
您可以使用适当调整的标准切片机制。
\documentclass[10pt]{book}
\usepackage{multicol}
\setlength\columnsep{1cm} % sets the distance between columns
\usepackage{blindtext}
\makeatletter
\newcounter{para}
\newcommand\mypara[1]{%
\@startsection{para}{1}{\z@}%
{-\topsep}%
{\topsep}%
{\normalfont\bfseries\centering}%
{}\label{#1}%
}
\newcommand{\myparamark}[1]{}
\renewcommand{\@seccntformat}[1]{%
\ifcsname format#1\endcsname
\csname format#1\endcsname
\else
\csname the#1\endcsname\quad
\fi
}
\newcommand{\formatpara}{\thepara}
\makeatother
\begin{document}
\title{Minimum working example}
\pagestyle{empty}
% main part of the document:
\mainmatter
\begin{multicols}{2}
\mypara{ref1}
%A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more\\
A line more
\blindtext
\mypara{ref2}
\blindtext
\mypara{ref3}
\blindtext
\mypara{ref4}
\blindtext
\end{multicols}
\end{document}
您可以检查取消注释第一个A line more
,第 4 节将被推送到下一页。
答案2
删除\vfill
@Flexo013 指出的确实可以解决您的本地问题。不过,我会提供另一种解决方案,在我看来,它更有效。
首先,如果您不使用\chapter
(并且没有\frontmatter
),那么您肯定不需要该类的功能book
。其次,如果您希望能够创建目录和书签,那么您\para
将无法完成这项工作。
让我切换到并通过使用来自包的单行来article
修改顶级分段命令。 MWE:\section
\titleformat
titlesec
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\setlength\columnsep{1cm} % sets the distance between columns
\usepackage{blindtext}
\usepackage[explicit]{titlesec}
\usepackage{hyperref}
\pagestyle{empty}
\begin{document}
\begin{multicols}{2}
\tableofcontents
\makeatletter
\titleformat{\section}[block]{\centering\bfseries}{\thesection}{0pt}{\@gobble{#1}}[\label{par:#1}]
\makeatother
\section{foo}
\blindtext
\section{bar}
In \S\ref{par:foo} we said that \ldots
\section{foo2}
\blindtext
\section{bar2}
In §\,\ref{par:foo2} we will say that \ldots
\section{foo3}
\blindtext
\section{bar3}
\blindtext
\end{multicols}
\end{document}