平均能量损失

平均能量损失

date=false当使用和textstyle=\footnotesize之类的设置时,Cronosys 无法正确计算时间线的高度\chronoevent

有人可以提出解决方法吗?

平均能量损失

\documentclass{article}
\usepackage{chronosys}
\usepackage{tcolorbox}

\begin{document}

\noindent
\begin{minipage}{0.45\linewidth}
  \begin{tcolorbox}
    \startchronology[startyear=1, stopyear=2000, dates=false]
      \chronoevent{1500}{\parbox{2cm}{%
        \centering Some text that goes on to a few lines by way of example.}}
    \stopchronology
  \end{tcolorbox}
\end{minipage}\hfill
\begin{minipage}{0.45\linewidth}
  \begin{tcolorbox}
    \startchronology[startyear=1, stopyear=2000, dates=false]
    \chronoevent[date=false, textstyle=\footnotesize]{1500}{\parbox{2cm}{%
      \centering Some text that goes on to a few lines by way of example.}}
    \stopchronology
  \end{tcolorbox}
\end{minipage}

\end{document}

MWE 输出

我希望两个框的底部边距相同。

答案1

有两个独立的问题与不正确的盒子尺寸有关。

首先,textstyle当标签放在用于测量尺寸的框内时,不会使用该参数。这可以视为一个错误。可以通过将参数添加到框的内容中来修补它,类似于实际排版标签所使用的代码(与用于测量尺寸的代码是分开的)。

\xpatchcmd{\dochronoevent}{%
% search
\ifdim\!chrperiodeventtextwidth > \z@%
\vbox {\hsize\!chrperiodeventtextwidth #3}%
\else #3\fi%
}{%
% replace
\ifdim\!chrperiodeventtextwidth > \z@%
\vbox {\hsize\!chrperiodeventtextwidth \!chr@eventtextstyle{#3}}%
\else \!chr@eventtextstyle{#3}\fi%
}{}{}

第二个问题是date=false参数。框的这一部分实际上是单独测量的,当参数为 false 时,框会变小,但是由于某种原因,测量到的尺寸减小幅度不足以完全补偿日期标签。我不太清楚为什么会发生这种情况。一个解决方案是当参数为 false 时减去一点额外的空间 - 虽然不是很干净,但似乎有效。

\xpatchcmd{\dochronoevent}{%
\if!chreventdate\hbox{#2}\fi}{%
\if!chreventdate\hbox{#2}\else\vskip-6pt\fi}{}{}

请注意,在宏名中chronosys使用!字符,因此除此之外,\makeatletter您还需要更改的 catcode !

完整 MWE:

\documentclass{article}
\usepackage{chronosys}
\usepackage{tcolorbox}
\usepackage{xpatch}

\makeatletter
\catcode`\!=11
% take textstyle into account when measuring size
\xpatchcmd{\dochronoevent}{%
\ifdim\!chrperiodeventtextwidth > \z@%
\vbox {\hsize\!chrperiodeventtextwidth #3}%
\else #3\fi%
}{%
\ifdim\!chrperiodeventtextwidth > \z@%
\vbox {\hsize\!chrperiodeventtextwidth \!chr@eventtextstyle{#3}}%
\else \!chr@eventtextstyle{#3}\fi%
}
{\typeout{text style patch ok}}
{\typeout{text style patch failed}}
% remove 6pt when date is not printed
\xpatchcmd{\dochronoevent}{%
\if!chreventdate\hbox{#2}\fi}{%
\if!chreventdate\hbox{#2}\else\vskip-6pt\fi}
{\typeout{date correction patch ok}}
{\typeout{date correction patch failed}}
\catcode`\!=12
\makeatother

\begin{document}

\noindent
\begin{minipage}{0.45\linewidth}
  \begin{tcolorbox}
    \startchronology[startyear=1, stopyear=2000, dates=false]
      \chronoevent{1500}{\parbox{2cm}{%
        \centering Some text that goes on to a few lines by way of example.}}
    \stopchronology
  \end{tcolorbox}
\end{minipage}\hfill
\begin{minipage}{0.45\linewidth}
  \begin{tcolorbox}
    \startchronology[startyear=1, stopyear=2000, dates=false]
    \chronoevent[date=false, textstyle=\footnotesize]{1500}{\parbox{2cm}{%
      \centering Some text that goes on to a few lines by way of example.}}
    \stopchronology
  \end{tcolorbox}
\end{minipage}


\end{document}

结果:

在此处输入图片描述

相关内容