环境{tcolorbox}*
正在以我无法预料的方式解释位置参数。
当我包含时*
,位置是出乎意料的——\begin{VocabBox}*[b]...
没有被放置在最近的合理底部位置,而是尴尬地放置在文档的末尾。
如果我排除*
,则的放置\begin{VocabBox}[b]...
将符合预期。
这两个 MWE 应该可以证明我的意思(我无法重现我所看到的行为,\documentclass[]{article}
而不得不使用我实际正在处理的文档类\documentclass[]{svmono}
):
[0077] [实施例 1]
\documentclass[]{svmono}
%%%%%% personally included packages %%%%%%%
\usepackage{paracol}
\usepackage[many]{tcolorbox}
\usepackage[bottom]{footmisc}% places footnotes at page bottom
\usepackage{lipsum}
%%%%%% definitions %%%%%%%%%%%%%%%%%%%%%%%%
\NewTColorBox{VocabBox}{ s O{!htbp} }{%
floatplacement={#2},
IfBooleanTF={#1}{float*,width=\textwidth}{float},
colframe=blue!50!black,colback=blue!10!white,% any tcolorbox options here
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{paracol}{2}
\begin{leftcolumn}%
\begin{VocabBox}*[b]
\lipsum[2]
\end{VocabBox}
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\end{leftcolumn}
\begin{rightcolumn}
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\end{rightcolumn}
\end{paracol}
\end{document}
[实施例2]
\documentclass[]{svmono}
%%%%%% personally included packages %%%%%%%
\usepackage{paracol}
\usepackage[many]{tcolorbox}
\usepackage[bottom]{footmisc}% places footnotes at page bottom
\usepackage{lipsum}
%%%%%% definitions %%%%%%%%%%%%%%%%%%%%%%%%
\NewTColorBox{VocabBox}{ s O{!htbp} }{%
floatplacement={#2},
IfBooleanTF={#1}{float*,width=\textwidth}{float},
colframe=blue!50!black,colback=blue!10!white,% any tcolorbox options here
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{paracol}{2}
\begin{leftcolumn}%
\begin{VocabBox}[b]
\lipsum[2]
\end{VocabBox}
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\end{leftcolumn}
\begin{rightcolumn}
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\lipsum[1]
\end{rightcolumn}
\end{paracol}
\end{document}
问题:
为什么位置算法会给出奇怪的结果\begin{VocabBox}*[b]
,并且可以在不绕过包的情况下进行补救吗?
包装信息:
t颜色框:CTAN 页面
svmono:下载 svmono.zip(*S*pringer*V*erlag*Mono*graph 类)
答案1
我有一个解决方法。让浮动对象流入一列,计算它占用的行数,并\enlargethispage
在处理时将负值添加到第二列*[b]
,\vspace*
当处理时*[t]
,与维度相关的值是最佳的\baselineskip
。这不是一种自动方法,特别是在\vspace*
段落内添加时,但它可能会有所帮助。
自动计算行数可能是您的另一个问题,因为VocabBox
现在 TeX 文件中定义的环境处于外部模式,不能\setbox
像我们在 TeX 排版中经常使用它那样直接通过命令计算。
我附上了一个 TeX 文件和结果预览。我们可以运行 lua-、xe- 和 pdflatex。
%! *latex mal-tcolorbox.tex
% The svmono.cls file is available via:
% wget http://ftp.utia.cas.cz/pub/staff/studeny/monogr/svmono.cls
\documentclass[]{svmono}
%%%%%% personally included packages %%%%%%%
\usepackage{paracol}
\usepackage[many]{tcolorbox}
\usepackage[bottom]{footmisc}% places footnotes at page bottom
\usepackage{lipsum}
%%%%%% definitions
\NewTColorBox{VocabBox}{ s O{!htbp} }{%
floatplacement={#2},
IfBooleanTF={#1}{float,width=\textwidth}{float},
colframe=blue!50!black,colback=blue!10!white,% any tcolorbox options here
}
\begin{document}
\begin{paracol}{2}
\begin{leftcolumn}%
\begin{VocabBox}*[b]
% *[b] <-- \enlargethispage; [b] is for one column
% *[t] <-- \vspace*; [t] is for one column
\lipsum[2]
\end{VocabBox}
\lipsum[1-5]
\end{leftcolumn}
\begin{rightcolumn}
\enlargethispage{-11\baselineskip} % when using *[b]
%\vspace*{10\baselineskip} % when using *[t]
\lipsum[1-5]
\end{rightcolumn}
\end{paracol}
\end{document}