我正在为我的博士论文答辩准备一张幻灯片,上面列出了一些研究工作、一些任务和出版物。如果我自己创建时间线,那就没有问题了。但是当我将它与我的演示文稿集成时,由于我需要对代码的某些部分进行 \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&%
\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
另一个补丁是为时间线的帧中设置一个明确的值,从而影响时间线和标签之间的垂直空间。