如何列出不可破坏物品的清单?

如何列出不可破坏物品的清单?

继续问题,我尝试制作一个项目列表,每个项目都包含不可破坏的文本。这可以使用 minipage 手动完成:

\documentclass[10pt,a4paper]{article}
\usepackage{lipsum} %for example
\setlength{\textheight}{7cm} %about one item fits per page
\begin{document}
\begin{itemize}
\item\begin{minipage}[t]{\linewidth}
\lipsum[1]
\end{minipage}
\item\begin{minipage}[t]{\linewidth}
\lipsum[2]
\end{minipage}
\end{itemize}
\end{document}

我希望它定义一个列表环境,就像 itemize(或其他)一样,只是项目会自动插入到 minipage 中,就像我的手动示例一样。该解决方案对于嵌套列表环境应该是强大的,因此如果要\item重新定义,必须以非常温和的方式进行...不确定如何。在重新定义环境 itemize-block(例如)后,以下代码应该可以编译,并且不会破坏页面中每个项目中的文本:

\begin{itemize-block}
\item
\lipsum[1]
\item \begin{itemize}
\item let us make sure it compiles even with 
\item a nested list...
\end{itemize}
\item
\lipsum[2]
\end{itemize-block}

这当然可以做到...只是我不知道该怎么做。

答案1

我会这样做:

\newenvironment{block-itemize}{%
  \itemize
  \let\olditem\item
  \let\closepage\relax  
  \renewcommand\item[1][]{%
    \closepage\olditem[#1]\minipage[t]{\linewidth}%
    \let\closepage\endminipage
  }%
}{%
  \closepage
  \enditemize
}

然后你写

\begin{block-itemize}
\item \lipsum[1]
\item \lipsum[2]
\end{block-itemize}

简单解释一下:启动时,环境会开始一个常规操作\itemize,然后将 的通常定义保存\item到 中\olditem。然后\item重新定义,以便:(1) 关闭“上一个”小页面 (2) 启动一个常规项目(使用\olditem)和 (3) 打开一个新的小页面。当然,对于第一个项目,没有小页面可以关闭,这就是为什么\closepage首先将其定义为\relax(不执行任何操作),但\endminipage在第一次使用 之后将其重新定义为\item。环境的结束只是关闭最后一个小页面和 itemize 环境。

笔记:实际上,我会使用类似和的东西\my@olditem\my@closepage并将整个定义放入样式文件中,这样我就不会意外地重新定义来自另一个包的命令。但我想让上面的代码保持干净,而不要@到处都是那些。

答案2

这是对以下评论的回复胡安的回答

这是他的建议的修改版本,适用于description环境。

% ==========================================================
% Adapted from TeX.StackExchange.com user Juan A. Navarro's
% solution for itemize as seen at
% https://tex.stackexchange.com/a/4493/327
% ----------------------------------------------------------
\newcommand\myitem[1][]{%
  \closepage\item[#1]\minipage[t]{\linewidth}%
  \let\closepage\endminipage%
  }
% ----------------------------------------------------------
\newenvironment{block-description}{%
  \description
  \let\olditem\item
  \let\closepage\relax  
  %\def\item[1][]{\myitem}[1]
}{%
  \closepage
  \enddescription
}

我不喜欢让项目定义存在于那样的环境之外,但是我尝试过的所有变化都失败了,而且我不知道该如何修复它。

应用程序看起来像

\begin{block-description}

\myitem[Week 1] Aug. 18--22 \\

  \begin{tabular}{lp{2.5cm}p{7.5cm}}
            & Reading & Topic and notes \\
    \hline
    Mon.    & & Intro; administriva; pretest\\
    Tue.    & \\
    Wed.    & 18.1--18.5 & Electrostatics; Coulombs law \\
    Thu.    & \multicolumn{1}{r}{\textbf{Activity day:}} & 
              sticky electrostatics  \\
    Fri.    &  & Electrostatic force and multiple
                 charges 
  \end{tabular}

\myitem[Week 2]  Another table for the next week 

\myitem[Week 3]  Yet another table for the third week 

\begin{block-description} 

每周内容完整地显示在一页或另一页上,不会中断。


这是今天出现的一个小问题:要在此上下文中启用真正的脚注,请使用类似

\NewDocumentCommand\myfootnotetext{o +m}{% One optional and one long mandatory argument
  \closepage% End the current item so that we are outside of
            % minipage context
  \IfNoValueTF{#1}
  {\footnotetext{#2}}
  {\footnotetext[#1]{#2}}% Call \footnotetext either with or
                         % without the optional argument
  \let\closepage\relax% Re-define \closepage so that the next
                      % \myitem won't break when it tries \closepage
}

这需要\usepackage{xparse}。然后您可以\footnotemark在项目内部发出并\myfootnotetext在该项目的底部发出,脚注将出现在页面底部(当然,在无法正确放置的病理情况下)。

相关内容