我的 chronosys 时间轴中部分透明的灰色 chronoevents?或者使用任何其他 Plain-TeX、LaTeX、LuaLaTeX 甚至 XeLaTex 包或方法?

我的 chronosys 时间轴中部分透明的灰色 chronoevents?或者使用任何其他 Plain-TeX、LaTeX、LuaLaTeX 甚至 XeLaTex 包或方法?

在组合“传统”时间线时,我拼凑了一种在 chronosys 中为我的框着色的方法,但我希望事件框是部分透明的。

这将允许更好的眼动追踪,特别是当事件相距很近且标记深度不同时。请参阅下面使用 Gimp 制作的模拟图,了解其外观。

如果文本与颜色框更好地对齐,那就更好了,请注意 Darwin 中的“s”和 Empire 中的“m-”。我的临时代码似乎可以工作,但会产生错误。 **(感谢 Kola B.,请参阅灰色与灰色

代码如下:

\documentclass[letterpaper,12pt,landscape]{article}
\usepackage[T1]{fontenc}
\usepackage{chronosys}

\begin{document}

\subsection*{Biographical cornerstones}
\startchronology[startyear=1850,stopyear=1950,height=0.5ex]

\chronoevent[textwidth=4.5cm,colorbox={grey!10},markdepth=100pt]%
{1882}{born in the Austrian part of the Austria-Hungarian Empire}
\chronoevent[textwidth=4cm,colorbox={grey!10},markdepth=40pt]%
{1885}{Publication of Darwin's Evolutionary Theory}

\stopchronology

\end{document}

编译后的示例:

在此处输入图片描述

以下是一个粗略的模型:

chronosys 文档没有提到透明度作为一种选择,但由于它使用 Tikz(用于绘制线条)和 colorbox(用于事件),我相信透明度是可能的。

我尝试了以下方法,尝试使用如何指定透明颜色根据 cfr 的参考:

\documentclass[letterpaper,12pt,landscape]{article}
\usepackage[T1]{fontenc}
\usepackage{chronosys}
\usepackage{transparent}

\begin{document}

\subsection*{Biographical cornerstones}
\startchronology[startyear=1850,stopyear=1950,height=0.5ex]

\chronoevent[textwidth=4.5cm,colorbox={gray!10},markdepth=100pt]%
{1881}{born in the Austrian part of the Austria-Hungarian Empire}
\chronoevent[textwidth=4cm,markdepth=40pt]%
{1885}{\transparent{0.3}\colorbox{blue}{Publication of Darwin's Evolutionary Theory}}

\stopchronology

\end{document}

但结果是这样的:

在此处输入图片描述

更改透明度会影响框的颜色,使其变亮或变暗,但不允许框变得更透明或更不透明。请注意,浅蓝色框中的文本非常模糊。当“透明度”被修改时,框内的文本也会变得更亮或更暗,这是不想要的副作用。

请告知是否存在使用其他时间线包的解决方案,除此之外,chronosys我还想到实现目标的另一种方法是以某种方式使连接框的线半透明。解决方案应该能够反映事件的月份/日期/年份,并在时间线上自动水平放置事件。如果有人知道如何将 percusse 的答案变成 MWE,我们将不胜感激。答案是“纯 TeX”还是“Tikz”,是否需要多次编译,或者其他,只要它能工作就行。

为 @cfr 点赞,他提出的以下解决方案非常完美。他的解决方案制作的时间线类型与目前可用的 LaTeX/TeX 软件包(至少是我所知道的软件包)制作的时间线类型不同。

尽管提出了出色的解决方案,但拥有基于“包”的解决方案(无论是使用 chronosys 还是其他包)仍然很有帮助。

答案1

当前版本:克洛诺斯
请报告错误在 codeberg 上

这是基本版本。本质上,样式chronos设置了基本时间线。chronos date然后可用于获取该时间线上的适当点,从该点将线条拖放到事件节点。来自的信息chronos date也可以在节点本身中使用。这里它用于打印节点内容之前的日期。

我使用循环来添加事件,但这只是为了节省输入。如果愿意,可以逐个添加。

基本时间线架构应如下布局:

\begin{tikzpicture}
    [
      chronos={%
        <options>
      },
    ]
    <events and such on the timeline specified in the usual way>
\end{tikzpicture}

选项chronos如下:

  • width=<dimension>
  • height=<dimension>
  • start date=YYYY-MM-DD
  • end date=YYYY-MM-DD

默认情况下,时间线又1pt高又100mm宽,开始和结束日期都在上个千年的开始。

chronos date=YYYY-MM-DD然后可以在图片中使用它来帮助将事物放置在时间线上。例如,我在下面的一个循环中使用它,如下所示,其中\i保存当前迭代的日期,\j保存文本并\k保存偏移时间线下方节点的距离。

\path [postaction={draw=gray, -{Triangle[width=1.5pt,reversed,length=.75pt,fill=gray]}}, chronos date/.expanded={\i}] ({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0) -- +(0,-\k) node [anchor=north, fill opacity=.75, fill=gray!25, draw=gray, rounded corners, font=\footnotesize\sffamily] {\chronosthingday/\chronosthingmonth/\chronosthingyear\\\j};

chronos date输入\i日期,这将设置和。\thechronosthingdate第一个是数字,可用于计算在时间线上放置事件的距离。这应该是\chronosthingyear\chronosthingmonth\chronosthingday

({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0)

\thechronosstartdate保存与时间线开始日期相对应的数字,并\chronosunit保存每天允许的长度(以点为单位)。这是在chronos使用时根据开始和结束日期以及宽度计算得出的。每端允许 10pt 的偏移量,这样第一个日期就不会正好在开始处,最后一个日期也不会正好在结束处。

\chronosthingday\chronosthingmonth并分别\chronosthingyear保存设置的日、月、年chronos date,如果需要,可以将其用于节点或标签的内容中。

将以下三元组输入到循环中(\i/\j/\k

  • {1001-11-05}/{No fireworks}/10pt
  • {1002-07-04}/{No fireworks}/80pt
  • {1002-05-01}/{May Day}/50pt
  • {1002-06-21}/{Summer Solstice}/10pt

因此得出

克洛诺斯

完整代码:

\documentclass[tikz,multi,border=10pt]{standalone}
\usepackage{datenumber}
\usetikzlibrary{arrows.meta}
\newcounter{chronosstartdate}
\newcounter{chronosenddate}
\newcounter{chronosstartyear}
\newcounter{chronosendyear}
\newcounter{chronosyeardate}
\newcounter{chronosthingdate}
\pgfkeys{/pgf/number format,
  int detect,
  set thousands separator={},
}
\tikzset{
  chronos/.code={% https://tex.stackexchange.com/a/159856/ - Claudio Fiandrino
    \tikzset{%
      align=center,
      anchor=mid,
      /chronos/.cd,
      #1
    }%
    \setstartyear{\chronosstartyear}%
    \setmydatenumber{chronosstartdate}{\chronosstartyear}{\chronosstartmonth}{\chronosstartday}%
    \setmydatenumber{chronosenddate}{\chronosendyear}{\chronosendmonth}{\chronosendday}%
    \pgfmathsetmacro\chronosunit{(\chronoswidth-20pt)/(\thechronosenddate-\thechronosstartdate)}%
    \draw [line width=\chronosheight] (-10pt,0) coordinate (chronos pre) -- +(\chronoswidth,0) coordinate (chronos post);
    \coordinate (chronos start) at (0,0);
    \coordinate (chronos end) at ([xshift=-10pt]chronos post);
    \setcounter{chronosstartyear}{\chronosstartyear}%
    \setcounter{chronosendyear}{\chronosendyear}%
    \def\tempa{01}%
    \ifx\chronosstartmonth\tempa
      \ifx\chronosstartday\tempa
        \else\stepcounter{chronosstartyear}%
      \fi
      \else\stepcounter{chronosstartyear}%
    \fi
    \def\tempa{12}%
    \def\tempb{31}%
    \ifx\chronosendmonth\tempa
      \ifx\chronosendday\tempb
        \stepcounter{chronosendyear}%
      \fi
    \fi
    \foreach \i in {\thechronosstartyear,...,\thechronosendyear} {%
      \setmydatenumber{chronosyeardate}{\i}{01}{01}%
      \node [above, anchor=south] at ({(\thechronosyeardate-\thechronosstartdate)*\chronosunit pt},0) {\i}; }
  },
  chronos date/.code args={#1-#2-#3}{%
    \tikzset{%
      /chronos/.cd,
      thing year={#1},
      thing month={#2},
      thing day={#3},
    }%
    \setmydatenumber{chronosthingdate}{\chronosthingyear}{\chronosthingmonth}{\chronosthingday}%
  },
  /chronos/.search also={/tikz},
  /chronos/.cd,
  start year/.store in=\chronosstartyear,
  start month/.store in=\chronosstartmonth,
  start day/.store in=\chronosstartday,
  end year/.store in=\chronosendyear,
  end month/.store in=\chronosendmonth,
  end day/.store in=\chronosendday,
  thing year/.store in=\chronosthingyear,
  thing month/.store in=\chronosthingmonth,
  thing day/.store in=\chronosthingday,
  start date/.style args={#1-#2-#3}{%
    start year={#1},
    start month={#2},
    start day={#3},
  },
  end date/.style args={#1-#2-#3}{%
    end year={#1},
    end month={#2},
    end day={#3},
  },
  width/.store in=\chronoswidth,
  height/.store in=\chronosheight,
  start date=1001-10-01,
  end date=1003-06-14,
  width=100mm,
  height=1pt,
  chronos date=1850-01-01,
}
\begin{document}
\begin{tikzpicture}
  [chronos]
  \foreach \i/\j/\k in {{1001-11-05}/{No fireworks}/10pt,{1002-07-04}/{No fireworks}/80pt,{1002-05-01}/{May Day}/50pt,{1002-06-21}/{Summer Solstice}/10pt}
 {%
   \path [postaction={draw=gray, -{Triangle[width=1.5pt,reversed,length=.75pt,fill=gray]}}, chronos date/.expanded={\i}] ({(\thechronosthingdate-\thechronosstartdate)*\chronosunit pt},0) -- +(0,-\k) node [anchor=north, fill opacity=.75, fill=gray!25, draw=gray, rounded corners, font=\footnotesize\sffamily] {\chronosthingday/\chronosthingmonth/\chronosthingyear\\\j};
  }
\end{tikzpicture}
\end{document}

答案2

这个问题时不时就会出现,我以为最终会有人进去,找到 TikZ 键并更改它......但是......有人能错到什么程度呢?

无论如何,作者做了一些极其保守的事情,并没有向 pgfkeys 屈服。因为为什么要让事情变得更容易?(顺便说一句,这是纯 TeX 用户的典型特征,尽管 pgfkeys 也可以在纯 TeX 中使用)。

因此,按照他的(一定是他)的步骤,我发现该框是一个颜色框,而不是 TikZ 节点。所以你的选择非常有限

  • 作者修复了它
  • 您开始定义一个选项,例如

     \csname !chrverif\endcsname\gdef\csname !chr@eventopacity\endcsname{}%
     \csname !chrverif\endcsname\gdef\csname !chreventdefaultopacity\endcsname{1}%
    

    然后将此选项放置在需要的位置,同时用透明组封装绘制框的部分(% %AFFICHAGE如果我没记错的话,从开始)。然后你会遇到一些奇怪的问题,例如pdflatex - 透明包似乎不起作用

恕我直言,这个包没什么用。编写您自己的简单 TikZ 包,您将在一两周内使用pgfkeys基本语法恢复功能。一半的包代码重新发明了pgfkeys选项解析(普通 TeX 用户的另一个特点)。另一季度基本上是装箱拆箱内容。

答案3

对我来说,用纯 TikZ 图片绘制“传记基石”比用 更简单chronosys。使用tikzpicture你会得到稍微多一点的代码,但是有了它,你就可以完全控制节点样式的自定义。例如:

\documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{arrows.meta,positioning}

\begin{document}
\subsection*{Biographical cornerstones}
    \begin{center}
\begin{tikzpicture}[
    node distance = 0mm,
TN/.style args = {#1/#2}{% as Transparency Node
    fill=#1,
    fill opacity=#2,
    text opacity=1, align=flush left,
    inner sep=1mm, outer sep=0.25mm, below},
   TN/.default = gray!50/0.5,
      L/.style = {% as Line
    draw=gray, line width=1mm,
    {Bar[width=4mm,line width=0.4pt]}-{Bar[width=4mm,line width=0.4pt]}
                 }
                    ]
\draw[L]    ( 0,0)  coordinate (s)
                    node[above=2mm] {1850} -- + 
            (10,0)  node[above=2mm] {1950};
\draw (3.1,0) -- + (0,-2.4)
        node (e1)   [TN]              {1881}
        node (e1a)  [TN,below=of e1]  {born in the Austrian part\\
                                       of the Austria-Hungarian\\
                                       Empire};
\draw (3.5,0) -- + (0,-0.4) 
        node (e2)   [TN=blue!30/0.3]  {1885}
        node (e2a)  [TN=blue!30/0.7,
                     below=of e2]    {Publication of Darwin's\\
                                      Evolutionary Theory};
    \end{tikzpicture}
    \end{center}
\end{document}

得出:

在此处输入图片描述

相关内容