执行

执行

我正在使用该tikz-timing软件包创建时间线,因为chronosyschronology不配合,而且功能太有限、太过时,不符合我的目的,moderntimeline不幸的是无法以水平线性格式显示。(我试图创建的时间线相当复杂,而时间线软件包的选择极其有限。)

一切都进行得相当顺利,考虑到我最近才开始使用 LaTeX(在对 Lilypond 有一些有限的经验之后)来创建这个时间线,除了打字[white, timing/D/background/.style={fill=orange}]占用了大量的空间(和时间),这非常不方便并且使代码看起来非常混乱。

我尝试过使用\newcommand(我听说\def基本上只是它的一个劣质版本),但到目前为止,编译器不喜欢我以这种方式使用它,因为我没有定义实际的命令,只是一个替换。

我原本拥有的是

\newcommand{\efill}[1]{timing/D/background/.style={fill=#1}}

我以为这样我就可以输入[\efill {blue}]将填充设置为蓝色。由于这是一个缩写而不是命令,因此它并没有按照我预期的方式工作。

理想的解决方案将允许定义字符到颜色的同义词(因此,我只需输入单个字符的名称,而不是输入整个颜色名称),以及定义自定义的封闭符号(例如,{{ob}}在编译期间扩展为[orange, timing/D/background/.style={fill=blue}].

我怎样才能实现这个目标?

以下是我对 MWE 的新手尝试:

\documentclass{article}
\usepackage{tikz, tikz-timing}

\begin{document}
   \Huge
   \begin{tikztimingtable}
       {\LARGE{Benjy}}  & [blue, timing/D/background/.style={fill=none}]DDDD;[orange,timing/D/background/.style={fill=green}]DDDD  \\

       \begin{extracode}
        \tableheader
            {\begin{Large}Character\end{Large}}
                {\begin{LARGE}\textbf{Events}\end{LARGE}}
            \tablerules
            \fulltablegrid
        \end{extracode}
    \end{tikztimingtable}
\end{document}

我不确定我是否正确标记了它,因此请随意添加/删除标签。

答案1

我希望我正确理解了你的问题。

我定义了一个新的 TikZ 样式efill,它接受两个参数。

  • #1是绘制颜色
  • #2是填充颜色

然后可以使用类似的风格

efill={draw color}{fill color}

为了实现所要求的缩写b -> blue等,我使用了\colorlet类似

\colorlet{b}{blue}

执行

\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz,tikz-timing}
\colorlet{b}{blue}
\colorlet{o}{orange}
\colorlet{g}{green}
\tikzset{
    efill/.style n args={2}{
        #1,timing/D/background/.style={fill=#2}
    }
}
\begin{document}
\Huge
\begin{tikztimingtable}
    {\LARGE Benjy}  & [efill={b}{none}]DDDD;[efill={o}{g}]DDDD  \\
    \begin{extracode}
        \tableheader
        {\Large Character}
        {\LARGE\textbf{Events}}
        \tablerules
        \fulltablegrid
    \end{extracode}
\end{tikztimingtable}
\end{document}

输出

在此处输入图片描述


从这里开始使用一些小技巧(TikZ 风格的论据) 您还可以单独设置绘制和填充颜色,并为它们指定默认值。在此示例中,默认值为draw=black,fill=none

\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz,tikz-timing}
\colorlet{b}{blue}
\colorlet{o}{orange}
\colorlet{g}{green}
\tikzset{
    set efill/.code={\pgfqkeys{/tikz/efill}{#1}},
    set efill={draw/.initial=black, fill/.initial=none},
    efill/.style={
        set efill={#1},
        \pgfkeysvalueof{/tikz/efill/draw},timing/D/background/.style={fill=\pgfkeysvalueof{/tikz/efill/fill}}
    }
}
\begin{document}
\Huge
\begin{tikztimingtable}
    {\LARGE Benjy}  & [efill={fill=b}]DDDD;[efill={draw=o,fill=g}]DDDD  \\
    \begin{extracode}
        \tableheader
        {\Large Character}
        {\LARGE\textbf{Events}}
        \tablerules
        \fulltablegrid
    \end{extracode}
\end{tikztimingtable}
\end{document}

在此处输入图片描述

相关内容