将 TikZ 设计元素添加到文档集合中

将 TikZ 设计元素添加到文档集合中

我想TikZ向文档集合添加设计元素。目前,我使用.sty文件来实现这一点。更具体地说,我构建了一个样式文件,在本例中称为homework.sty,其中我发出包调用\usepackage{tikz}并定义 TikZ 图片以及一个调用命令,\logo该命令接受文档标题作为其参数:

\usepackage{tikz}

\newcommand{\logo}[1]{%
  \begin{tikzpicture}[scale=.5]
    \draw [fill=gray!30] (0,0) rectangle (1,1);
    \draw (.5,-.5) rectangle (1.5,.5);
    \draw [fill=gray] (.5,0) rectangle (1,.5);
    \node [right] at (2,.3) {\LARGE #1};
  \end{tikzpicture}
}

在写作业表时,我会调用作业包并按如下方式应用徽标:

\documentclass{article}
\usepackage{homework}

\begin{document}

\logo{Sine \& Cosine} % the title is different for each homework sheet

\end{document}

当然,此协议会为每张作业表加载 TikZ(及其所有数据)。因此,我的问题是:能否以编译起来不那么麻烦的方式实现相同的结果?我考虑将图形导出TikZ到 PostScript 并使用includegraphics,但这似乎是一个繁琐的例程(请参阅 从 TikZ 导出 eps 图形)。此外,包含后记(以我的经验而言)本身就需要编写繁琐的程序,并且需要将图像存储在每个作业表文件夹中……

答案1

pgf不含 TikZ 的版本

\documentclass{article}

\usepackage{color}
\usepackage{pgf}

\definecolor{logolightgray}{gray}{.85}% = gray!30
\definecolor{logogray}{gray}{.5}

\newdimen\logounit
\setlength{\logounit}{5mm}

\newcommand*{\logo}[1]{%
  \begin{pgfpicture}
    \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\logounit}{\logounit}}
    \pgfsetfillcolor{logolightgray}
    \pgfusepath{fill, stroke}
    \pgfpathrectangle{\pgfpoint{.5\logounit}{-.5\logounit}}%
                     {\pgfpoint{\logounit}{\logounit}}
    \pgfusepath{stroke}
    \pgfpathrectangle{\pgfpoint{.5\logounit}{0pt}}%
                     {\pgfpoint{.5\logounit}{.5\logounit}}
    \pgfsetfillcolor{logogray}
    \pgfusepath{fill, stroke}
    \pgftransformshift{\pgfpoint{2\logounit}{.3\logounit}}
    \pgfsetfillcolor{black}
    \pgfnode{rectangle}{west}{\LARGE #1}{logotext}{}
  \end{pgfpicture}
}

\begin{document}
  \logo{Sine \& Cosine}
\end{document}

软件包 pgf 的结果

picture版本

绘图非常简单,也可以通过环境完成picture。唯一的复杂之处在于\framebox将线放在矩形外,而 pgf/TikZ 将线绘制在虚拟矩形的中间,一半线在外面,一半线在里面。picture加载包以简化计算。

\documentclass{article}

\usepackage{color}
\usepackage{picture}

\definecolor{logolightgray}{gray}{.85}
\definecolor{logogray}{gray}{.5}

\newcommand*{\logo}[1]{%
  \begingroup
    \setlength{\unitlength}{5mm}%
    \def\squarefill(##1,##2)##3##4{%
      \put(##1,##2){%
        \makebox(##3,##3){%
          \color{##4}%
          \rule{##3\unitlength}{##3\unitlength}%
        }%
      }%  
    }%  
    \def\squaredraw(##1,##2)##3{%
      \put(##1\unitlength+.2pt,##2\unitlength+.2pt){%
        \framebox(##3\unitlength-.4pt, ##3\unitlength-.4pt){}%
      }%
    }%  
    \begin{picture}(1.5, 1.5)(0, -.5)
      \squarefill(0, 0){1}{logolightgray}
      \squarefill(.5, 0){.5}{logogray}
      \squaredraw(0, 0){1}
      \squaredraw(.5, -.5){1}
      \squaredraw(.5, 0){.5}
    \end{picture}%
    \kern.5\unitlength
    \kern.3333em % inner sep from \node
    \sbox0{\LARGE #1}%
    \raisebox{\dimexpr.8\unitlength-.5\height+.5\depth\relax}{\usebox0}%
  \endgroup
}

\begin{document}
  \logo{Sine \& Cosine}
\end{document}

环境图片的结果

相关内容