我的问题补充到围绕放置在两个定理环境之间的 tikzpicture 进行包装. 从中可以看出CTAN:文本流,在类似定理(列表等)的环境中包装图形的方法设计很差。
唯一方法(我愿意相信我错了,答案是正确的),也就是允许将图片包裹在两个定理环境之间,这些图片都是从内部调用的宏insbox.tex
,利用了的机制\parshape
。
但是这种方法有一个缺点。宏\InsertBox(R\L\C) {...}
获取其参数并将定理环境的内容形成为具有全局\parindent
长度的简单段落,而完全忽略定理环境定义的长度(labelwidth、labelsep、leftmargin 等)。
MWE 说明了问题
\documentclass[english]{article}
\usepackage{babel}
\usepackage{ntheorem}
\usepackage{caption}
\usepackage{lipsum}
\usepackage{tikz}
\theoremstyle{change}
%\theoremprework{\parindent=2em}
\newtheorem{theorem}{}[section]
\input{insbox.tex}
\begin{document}
\section{title 1}
\begin{theorem}\leavevmode\vspace{-\baselineskip}
\InsertBoxR{6}{\parbox{5.2cm}{\raggedleft\begin{tikzpicture}
\draw (0,0) rectangle (5,5);
\end{tikzpicture}
\captionof{figure}{}\label{mylabel1}}}[5]
\lipsum[1]
\end{theorem}
\setcounter{section}{100} % ===== for showing problem ========
\begin{theorem}\leavevmode\vspace{-\baselineskip}\InsertBoxR{0}{\quad\makebox[5.2cm]{}}[3]
\parindent = 10ex % ===== This length should be adjusted automatically depending on lalelwidth + labelsep
\lipsum[2]
\end{theorem}
\end{document}
答案1
似乎段落\InsertBoxR
就此结束。因此,文本被视为新文本,仅缩进。这可以通过撤消并插入标签的空间来\parindent
纠正。下面,这是使用新宏完成的。\parindent
\labelsep
\thindent
我还删除了\quad
第二条定理中的线\InsertBoxR
,因为第二条定理中的线比第一条中的线短。
代码:
\documentclass[english]{article}
\usepackage{babel}
\usepackage{ntheorem}
\usepackage{caption}
\usepackage{lipsum}
\usepackage{tikz}
\theoremstyle{change}
%\theoremprework{\parindent=2em}
\newtheorem{theorem}{}[section]
\newcommand{\thindent}{%
\setbox0\hbox{\rmfamily\bfseries\thetheorem}% for getting the label width
\hspace*{-\parindent}% undo parskip
\hspace*{\wd0}% width of label
\hspace*{\labelsep}%
}
\input{insbox.tex}
\begin{document}
\section{title 1}
\begin{theorem}\leavevmode\vspace{-\baselineskip}%
\InsertBoxR{6}{\parbox{5.2cm}{\raggedleft
\begin{tikzpicture}
\draw (0,0) rectangle (5,5);
\end{tikzpicture}
\captionof{figure}{}\label{mylabel1}}}[5]%
\thindent
\lipsum[1]
\end{theorem}
\setcounter{section}{100} % ===== for showing problem ========
\begin{theorem}\leavevmode\vspace{-\baselineskip}\InsertBoxR{0}{\makebox[5.2cm]{}}[3]% removed \quad
\thindent
\lipsum[2]
\end{theorem}
\end{document}
结果: