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}
我希望两个框的底部边距相同。
答案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}
结果: