以下 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}
导致:
- 预期结果,
- 如果注释掉该行,则会出现奇怪的结果,
% \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}