\paragraph 中的 multido 变量过早地增加了 1

\paragraph 中的 multido 变量过早地增加了 1

以下 MCE 的编译:

\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido}
\begin{document}
\multido{\i=1+1}{4}{%
  \chapter{I am the chapter \i}
  \section{I am a section of chapter \i}
  \subsection{I am a subsection of chapter \i}
  \subsubsection{I am a subsubsection of chapter \i}
  % \paragraph{I am a paragraph of chapter \i}
  % \subparagraph{I am a subparagraph of chapter \i}
}
\end{document}

导致:

  1. 预期结果,
  2. 如果注释掉该行,则会出现奇怪的结果, % \paragraph{...} 因为变量\i过早地增加了 1,并且没有出现最后一个相应的结果。如果 % \subparagraph{...} 另外注释掉该行,则会出现这种奇怪的行为,但\paragraph{...}工作正常。

此主题法国 TeX 论坛:(是法语,抱歉),一些贡献者隔离了这个问题,这似乎是一个真正的异常现象。

答案1

答案可能是“不要这样做”。\paragraph默认情况下排队标题这意味着它会被保留到下一个段落开始,以便可以将其排版为该段落的一部分。但在这里,下一个段落直到循环旋转并因此\i增加后才开始。

如果该段落在循环内,则一切都会变得更好:

\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido}
\begin{document}
\multido{\i=1+1}{4}{%
  \chapter{Je suis le chapitre \i}
  \section{Je suis une section du chapitre \i}
  \subsection{Je suis une sous-section du chapitre \i}
  \subsubsection{Je suis une sous-sous-section du chapitre \i}
   \paragraph{Je suis un paragraphe du chapitre \i}
  % \subparagraph{Je suis un sous-paragraphe du chapitre \i}
\mbox{}
}
\end{document}

答案2

(编辑) 2017:因为xint 1.1 (2014/10/28)这里需要\usepackage{xinttools}。代码已更新,以替换\usepackage{xint}初始答案。

另外,也可以使用\xintApplyUnbraced包中的可扩展宏信特。但是我们首先需要可扩展地生成一个算术序列,而这个包中没有提供,我在这里给出了一种可能的构造。

代码的结果是枚举符合预期,与 的现象相反\multido

\documentclass{report}

\usepackage{fixltx2e}
\usepackage{multido}
\usepackage{xinttools}


% we define an expandable macro \indices {a+b}{N} to generate
% {a}{a+b}{a+2b}...{a+(N-1)b}
\catcode`\_ 11
\def\indices    #1#2{\indices_A #1.#2.}
\def\indices_A  #1+#2.#3.{\indices_B {#3}{#1}{#2}{}}
\def\indices_B  #1#2#3{\ifnum #1>0
                          \expandafter\expandafter\expandafter
                          \indices_C
                       \else
                          \expandafter\indices_end
                       \fi \expandafter
                   {\the\numexpr #1-1\expandafter}\expandafter
                   {\the\numexpr #2+#3}{#3}{#2}}
\def\indices_end #1#2#3#4#5#6#7{#7}
\def\indices_C #1#2#3#4#5{\indices_B {#1}{#2}{#3}{#5{#4}}}
\catcode`\_ 8

\begin{document}

\multido{\i=1+1}{4}{%
  \chapter{Je suis le chapitre \i}
  \section{Je suis une section du chapitre \i}
  \subsection{Je suis une sous-section du chapitre \i}
  \subsubsection{Je suis une sous-sous-section du chapitre \i}
   \paragraph{Je suis un paragraphe du chapitre \i}
  % \subparagraph{Je suis un sous-paragraphe du chapitre \i}
}


\def\stuff #1{{}% this {} is to stop the expansion
  \chapter{Je suis le chapitre #1}
  \section{Je suis une section du chapitre #1}
  \subsection{Je suis une sous-section du chapitre #1}
  \subsubsection{Je suis une sous-sous-section du chapitre #1}
   \paragraph{Je suis un paragraphe du chapitre #1}
  % \subparagraph{Je suis un sous-paragraphe du chapitre #1}
}

\xintApplyUnbraced\stuff{\indices{5+1}{4}}
% generates for 5,6,7,8.


\end{document}

相关内容