moderntimeline 与使用 Beamer 定位不兼容

moderntimeline 与使用 Beamer 定位不兼容

我正在为我的博士论文答辩准备一张幻灯片,上面列出了一些研究工作、一些任务和出版物。如果我自己创建时间线,那就没有问题了。但是当我将它与我的演示文稿集成时,由于我需要对代码的某些部分进行 \usetikzlibrary{定位},时间线的标签就会错位。比较下面的两张图片。

这是一个代码示例。

\documentclass{beamer}

%%%%%% --- Stuff needed for the modern timeline in Beamer
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usepackage{textcomp} 
\usetikzlibrary{snakes}
\usepackage{ifthen}
\usepackage[firstyear=2009,lastyear=2014]{moderntimeline}

\makeatletter
% change these colors according to your needs
\colorlet{color0}{blue}
\colorlet{color1}{olive}

\newcommand*{\hintfont}{}
\newcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}}
\newcommand*{\listitemsymbol}{a~}
\newcommand*{\cventry}[7][.25em]{%
  \cvitem[#1]{#2}{%
    {\bfseries\raggedright #3}%
    \ifthenelse{\equal{#4}{}}{}{, \raggedright{\slshape#4}}%
    \ifthenelse{\equal{#5}{}}{}{,  \raggedright#5}%
    \ifthenelse{\equal{#6}{}}{}{, \raggedright#6}%
    .\strut%
    \ifx&#7&%
      \else{\newline{}\begin{minipage}[t]{\linewidth}\small\raggedright#7\end{minipage}}\fi}}
\newcommand*{\cvitem}[3][.25em]{%
  \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}%
      \raggedleft\hintstyle{#2} & {#3}%
  \end{tabular}%
  \par\addvspace{#1}}
\tlmaxdates{2009}{2014}
\newlength{\quotewidth}
\newlength{\hintscolumnwidth}
\setlength{\hintscolumnwidth}{0.175\textwidth}
\newlength{\separatorcolumnwidth}
\setlength{\separatorcolumnwidth}{0.025\textwidth}
\newlength{\maincolumnwidth}
\newlength{\doubleitemmaincolumnwidth}
\newlength{\listitemsymbolwidth}
\settowidth{\listitemsymbolwidth}{\listitemsymbol}
\newlength{\listitemmaincolumnwidth}
\newlength{\listdoubleitemmaincolumnwidth}
\setlength{\maincolumnwidth}{\dimexpr0.9\linewidth-\separatorcolumnwidth-\hintscolumnwidth\relax}

\tikzset{
    tl@startyear/.append style={
        xshift=(0.5-\tl@startfraction)*\hintscolumnwidth,
        anchor=base
    }
}
\makeatother

%%%%%%%% ----- Packages necessary for the rest of the slides
\usetikzlibrary{positioning}

\begin{document}

\begin{frame}

\tldatelabelcventry{2009.580}{June 2009}{MSc Thesis}{}{}
{}{}{}

\tllabelcventry{2009.583}{2009.833}{July-Sept. 2009}{Research stay}{Some Lab at SomeUniversity}
{Somewhere}{}{
\vspace{-10pt}
\begin{itemize}\setlength\itemsep{-5pt}
\item[--] task 1
\item task 2
\item More awesome tasks we developed
\end{itemize}
}

\tllabelcventry{2011.500}{2011.995}{June-Dec. 2011}{Research stay}{Some Lab at SomeUniversity}{Seomewhere}{}{}

\tldatelabelcventry{2010.500}{June 2010}{Some Conf. 2010}{}{}
{}{Some A, some title some year}

\end{frame}

\end{document}

这是预期的(这是通过评论生成的\usetikzlibrary{positioning}): 在此处输入图片描述

这就是使用提供的代码所获得的结果: 在此处输入图片描述

答案1

问题在于positioning重新定义above用于moderntimeline在时间线上定位文本的键。

这里有两个补丁可以解决您的问题。

\tl@textstartabove一种方法是使用\def而不是使用来重新定义宏,\pgfmathsetmacro就像在中所做的那样moderntimeline.sty

\def\tl@textstartabove{\tl@width+1pt}

我的猜测是,这\pgfmathsetmacro会干扰正在进行的更复杂的参数解析,positioning above但实际原因超出了我的知识范围。

由于修补后的命令适用于如果没有它,可以通过改变第 34 行的定义将positioning其应用于包:moderntimeline\tlwidth

\newcommand{\tlwidth}[1]{%
   \def\tl@width{#1}
   \def\tl@textstartabove{\tl@width+1pt}
}

y另一个补丁是为时间线的帧中设置一个明确的值,从而影响时间线和标签之间的垂直空间。

相关内容