我感到沮丧,因为无法以某种方式“标记”列表,使“标签”与列表保持一致,并且不会在它之前引入分页符(或分栏符)。
这里有一个平均能量损失:
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}
\tolerance=1000
\makeatletter
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\makeatother
\newcommand{\WviiTwoColumnSetup}{\raggedcolumns\RaggedRight}
\SetEnumitemKey{WviiTwoColumn}{%
before=\begin{multicols}{2}\WviiTwoColumnSetup,
after=\end{multicols}}
\begin{document}
\lipsum[1-2]
Convenient Starting Professions\nobreak\nopagebreak\begin{itemize}[WviiTwoColumn]\nopagebreak%
\item \class{Fighter}
\item \class{Thief}
\item \class{Ranger}
\item \class{Bishop}
\item \class{Ninja}
\end{itemize}
\end{document}
如果您查看它的渲染,您应该注意到我的“方便的起始职业”标签位于第 1 页,但列表本身位于第 2 页,尽管我拼命尝试阻止分页符。
(我正在使用 XeLaTeX。)
答案1
以下是避免整个对象出现分页符的一种方法:
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\newenvironment{twocolumnitemize}[1]
{%
\par\noindent
\begin{minipage}{\textwidth}
\begin{multicols}{2}[#1]
\raggedcolumns\RaggedRight
\begin{itemize}
}
{%
\end{itemize}
\end{multicols}
\end{minipage}
}
\begin{document}
\lipsum[1-2]
\begin{twocolumnitemize}{Convenient Starting Professions}
\item \class{Fighter}
\item \class{Thief}
\item \class{Ranger}
\item \class{Bishop}
\item \class{Ninja}
\end{twocolumnitemize}
\lipsum[2]
\end{document}
通过删除minipage
,您只能在逐项列表中获得可能的分页符。
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\newenvironment{twocolumnitemize}[1]
{%
\begin{multicols}{2}[#1]
\raggedcolumns\RaggedRight
\begin{itemize}
}
{%
\end{itemize}
\end{multicols}
}
\begin{document}
\lipsum[1-2]
\begin{twocolumnitemize}{Convenient Starting Professions}
\item \class{Fighter}
\item \class{Thief}
\item \class{Ranger}
\item \class{Bishop}
\item \class{Ninja}
\end{twocolumnitemize}
\lipsum[2]
\end{document}
答案2
两个答案
1- 对于简短列表
使用\vtop
盒子:
\documentclass[12pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{fontspec}
\usepackage{microtype}
\usepackage{multicol}
\usepackage[defaultlines=2,all]{nowidow}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{parskip}
\tolerance=1000
\makeatletter
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\makeatother
\newcommand{\WviiTwoColumnSetup}{\raggedcolumns\RaggedRight}
\SetEnumitemKey{WviiTwoColumn}{%
before=\begin{multicols}{2}\WviiTwoColumnSetup,
after=\end{multicols}}
\begin{document}
\lipsum[1-2]
\vtop{%
Convenient Starting Professions%
\begin{itemize}[WviiTwoColumn]%
\item \class{Fighter}
\item \class{Thief}
\item \class{Ranger}
\item \class{Bishop}
\item \class{Ninja}
\end{itemize}%
}
\end{document}
1- 对于长列表
根据 OP 所述,很长的列表需要分页。这使用包longtable
:
\documentclass[12pt]{article}
\usepackage{longtable}
\usepackage{enumitem}
\usepackage{lipsum}
\def\It{\textbullet\hskip.2in}
\makeatletter
\newcommand{\indexClass}[1]{\index{#1}}
\newcommand{\class}[1]{#1\indexClass{#1}}
\makeatother
\begin{document}
\lipsum[1-2]
\begin{longtable}[l]{llll}
\caption*{\bfseries\hskip1in Convenient Starting Professions}\\
\multicolumn{4}{l}
\endfirsthead
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\It \class{Fighter} & \It \class{Bishop}\\
\It \class{Thief} & \It \class{Ninja}\\
\It \class{Ranger} & ~\\
\end{longtable}
\end{document}
通过使用\phantom
可以分隔列,例如:
\It Fighter \phantom{\hskip2in} & \It Bishop\\
(仅适用于第一个条目)产生:
为了在项之间留出更多空间,\strut
可以将 a 添加到 的定义中\It
,\def\It{\textbullet\hskip.2in{\Large\strut}}
得到: