我想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}
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}