在带星号的 tcolorbox 环境中使用位置参数

在带星号的 tcolorbox 环境中使用位置参数

环境{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}

姆韦

相关内容