考虑一下平均能量损失:
\documentclass{report}
\usepackage[inline]{enumitem}
\newcommand{\foo}{Very long text to fill some lines}
\usepackage{xcolor}
\begin{document}
\begin{enumerate*}
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{enumerate*}
\bigskip
\textbf{\textcolor{red}{1.}} \textit{\foo\ \foo}\
\textbf{\textcolor{blue}{2.}} \foo\ \foo\ \foo\
\textbf{\textcolor{red}{1.}} \textit{\foo}
\end{document}
第一段展示了使用enumitem
包生成的内联列表。非常棒!
但我想要一种简单的方法来获得第二段所示的结果。
也就是说,我想要计数器 mod 2,以及一种根据奇偶校验来格式化标签和项目内容的简单方法。
任何想法?
答案1
您可以定义自己的内联enumerate*
环境:
\documentclass{article}
\newcommand{\foo}{Very long text to fill some lines}
\newenvironment{enumerate*}
{\setcounter{enumi}{0}% Restart the list item counter
\renewcommand{\item}{% Update \item to ...
\ifvmode\else\unskip\hspace{.5em}\fi% ... insert space before label
\refstepcounter{enumi}% ... step the enumi counter
\ifodd\value{enumi}
\normalfont\textcolor{red}{\textbf{\theenumi.}}\itshape
\else% \value{enumi} is even
\normalfont\textcolor{blue}{\textbf{\theenumi.}}%
\setcounter{enumi}{0}% Reset counter
\fi
\hspace{.5em}% Space after item label
\nobreak% Avoid breaks after setting the label + space
}
}{}
\usepackage{xcolor}
\begin{document}
\begin{enumerate*}
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{enumerate*}
\bigskip
\textbf{\textcolor{red}{1.}} \textit{\foo\ \foo}\
\textbf{\textcolor{blue}{2.}} \foo\ \foo\ \foo\
\textbf{\textcolor{red}{1.}} \textit{\foo}
\end{document}
答案2
您可以尝试以下操作并根据您的需要进行调整:
\documentclass{report}
\usepackage[inline]{enumitem}
\newcommand{\foo}{Very long text to fill some lines}
\usepackage{xcolor}
\newcommand*{\modtwolabel}[1]{\ifodd#1%
\textbf{\textcolor{red}{1.}}%
\else
\textbf{\textcolor{blue}{2.}}%
\fi}
\begin{document}
\begin{enumerate*}[label={\protect\modtwolabel{\value*}}]
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{enumerate*}
\bigskip
\textbf{\textcolor{red}{1.}} \textit{\foo\ \foo}\
\textbf{\textcolor{blue}{2.}} \foo\ \foo\ \foo\
\textbf{\textcolor{red}{1.}} \textit{\foo}
\end{document}
加上一些额外的标记,这也会影响项目内容。顺便说一句,我了解到 ,enumitem
它\AddEnumerateCounter
承诺为我的 提供更清晰的界面\modtwolabel
,但我无法让它工作。
\documentclass{report}
\usepackage[inline]{enumitem}
\newcommand{\foo}{Very long text to fill some lines}
\usepackage{xcolor}
\newif\ifoddlabel
\newcommand*{\modtwolabel}[1]{\ifodd#1%
\textbf{\textcolor{red}{1.}}%
\global\oddlabeltrue
\else
\textbf{\textcolor{blue}{2.}}%
\global\oddlabelfalse
\fi}
\newcommand*{\sigur}{\relax\ifoddlabel\itshape\fi}
\begin{document}
\begin{enumerate*}[label={\protect\modtwolabel{\value*}}]
\item\sigur \foo\ \foo
\item\sigur \foo\ \foo\ \foo
\item\sigur \foo
\end{enumerate*}
\bigskip
\textbf{\textcolor{red}{1.}} \textit{\foo\ \foo}\
\textbf{\textcolor{blue}{2.}} \foo\ \foo\ \foo\
\textbf{\textcolor{red}{1.}} \textit{\foo}
\end{document}
答案3
目前还不清楚你为什么要这么做,但事实就是如此。
\documentclass{report}
\usepackage[inline]{enumitem}
\usepackage{etoolbox}
\usepackage{xcolor}
\newcommand\agi{\aftergroup\aftergroup\aftergroup\itshape}
\newcommand\agu{\aftergroup\aftergroup\aftergroup\upshape}
\newrobustcmd{\SP}{}
\newrobustcmd{\modulotwo}[4]{%
% #1 = color for odd, #2 = color for even, #3 = format, #4 = counter
\upshape
\ifodd#4\relax
\def\SP{1}\textcolor{#1}{#3}\aftergroup\agi
\else
\def\SP{2}\textcolor{#2}{#3}\aftergroup\agu
\fi
}
\newcommand{\foo}{Very long text to fill some lines}
\begin{document}
\begin{enumerate*}[label=\modulotwo{red}{blue}{\SP.}{\value*}]
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{enumerate*}
\bigskip
\begin{enumerate*}[label=\modulotwo{red}{blue}{(\SP)}{\value*}]
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{enumerate*}
\end{document}
在第三个参数中,\modulotwo
您可以指定格式;数字(1 或 2)由 表示\SP
。
没有这个的不同实现enumerate
似乎并不是您真正需要的。
\documentclass{report}
\usepackage{xcolor}
\newenvironment{twovoices}
{\setcounter{twovoices}{0}%
\trivlist\item\relax\hspace{\parindent}\hspace{-\voiceindent}%
\let\item\twovoicesitem}
{\endtrivlist}
\newcommand{\twovoicesitem}{%
\stepcounter{twovoices}%
\upshape\hspace{\voiceindent}%
\ifodd\value{twovoices}%
\textcolor{red}{1.}\itshape
\else
\textcolor{blue}{2.}%
\fi
\nolinebreak\enspace\ignorespaces
}
\newcounter{twovoices}
\newlength{\voiceindent}
\setlength{\voiceindent}{2em plus .5em minus .5em}
\newcommand{\foo}{Very long text to fill some lines}
\begin{document}
\begin{twovoices}
\item \foo\ \foo
\item \foo\ \foo\ \foo
\item \foo
\end{twovoices}
\end{document}