TIKZ画FJSP中的甘特图-Trans必备

2023-11-09 01:10
文章标签 必备 甘特图 tikz trans fjsp

本文主要是介绍TIKZ画FJSP中的甘特图-Trans必备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TIZK是latex的一个包,可以结合latex的排版画出漂亮的图片。在投稿高质量期刊时,亮眼的图可以让审稿人赏心悦目,图文并茂,给审稿人和编辑留下好的印象。本文将介绍如何用TIKZ包画出FJSP中漂亮的甘特图,为算法描述时增添一分光彩。

有任何关于车间调度的问题欢迎交流 liruicug@163.com

环境

本人使用的是Texstuido 安装之前要按照texlive,安装教程就不多赘述,网上都有教程。截图如下:
在这里插入图片描述

头文件

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}

画坐标轴和标注刻度

首先必须要用变量名 表示坐标轴上的每个点位。其次需要用 \draw命令画出坐标轴。[-latex]表示单向箭头,[<->]表示双向箭头, [very thick] 修饰表示线段的宽度, (-0.5,0) – (12,0)表示从起点到终点的端点坐标。node关键字表示文字注释,[above] ,[below]表示文字的方位。方括号里面还可以填其他的参数, {\small $F1$}表示 \small表示 字体大小控制 $F1$ 表示latex内容,加上$表示斜体和公式环境。同样的,在\draw (O) node [below]{0} – ++(0, 3pt) ;这句话中 – ++ 表示在坐标轴上表上刻度。后面的(0, 3pt) 3pt表示刻度的长度为3pt, -3pt则刻度会标在坐标轴下面的位置。

每一句话都需要用英文分号结尾。和写代码是一样的

对于线段的控制可以自行百度。

		\coordinate (O) at (0, 0);\coordinate (A) at (1, 0);\coordinate (B) at (2, 0);\coordinate (C) at (3, 0);\coordinate (D) at (4, 0);\coordinate (E) at (5, 0);\coordinate (F) at (6, 0);\coordinate (G) at (7, 0);\coordinate (H) at (8, 0);\coordinate (I) at (9, 0);\coordinate (J) at (10, 0);\coordinate (K) at (11, 0);\coordinate (M1) at (0, 0.5);\coordinate (M2) at (0, 1.5);\coordinate (M3) at (0, 2.5);%axis\draw[-latex][very thick] (-0.5,0) -- (12,0) node[below] {\small $F1$};\draw[-latex][very thick] (0,-0) -- (0,4) node[above] {\small $Machine$};	\draw (O) node [below]{0} -- ++(0, 3pt) ;\draw (A) node [below]{1} -- ++(0, 3pt) ;\draw (B) node [below]{2} -- ++(0, 3pt) ;\draw (C) node [below]{3} -- ++(0, 3pt) ;\draw (D) node [below]{4} -- ++(0, 3pt) ;\draw (E) node [below]{5} -- ++(0, 3pt) ;\draw (F) node [below]{6} -- ++(0, 3pt) ;\draw (G) node [below]{7} -- ++(0, 3pt) ;\draw (H) node [below]{8} -- ++(0, 3pt) ;\draw (I) node [below]{9} -- ++(0, 3pt) ;\draw (J) node [below]{10} -- ++(0, 3pt) ;\draw (K) node [below]{11} -- ++(0, 3pt) ;\draw (M1) node [left]{$M_1$} -- ++(0, 3pt) ;\draw (M2) node [left]{$M_2$} -- ++(0, 3pt) ;\draw (M3) node [left]{$M_3$} -- ++(0, 3pt) ;

画带颜色的长方形

在FJSP问题中,方块表示一个工件,方块的左边表示开始时间,右边表示结束时间,方块的长度表示加工时间。一般在甘特图中用长方体表示一个工序。特殊的fuzzy FJSP除外。

用\fill命令表示填充一个区域。\filldraw表示又填充有画图形。 [fill= yellow]表示填充的颜色,[fill = blue!50] !50表示控制颜色的深浅。(0,0) rectangle (3,0.75) 表示 横坐标 从 0-3画长为3的 长边, 纵坐标从0-0.75画长度为0.75的 宽边。 (0,0) 是矩形的起点。node[left, black, xshift=-30pt, yshift = -12pt] {\small $O_{1,1}$}; 表示在右上角终点(3,0.75)的位置的左边,向x轴左偏移-30pt, 向y轴下偏移-12pt 标注 $O_{1,1}$ 工序

\filldraw[fill = yellow][thick] (0,0) rectangle (3,0.75) node[left, black, xshift=-30pt, yshift = -12pt] {\small $O_{1,1}$};\filldraw[fill = blue!50][thick] (0,1) rectangle (4,1.75) node[left, black, xshift=-40pt, yshift = -12pt] {\small $O_{2,1}$}; % 4表示长度 1.28 表示从 11.25 之间画高 green!30表示颜色深浅 0,1表示起点左下角, 0-4表示长 1-1.75表示宽\filldraw[fill = orange][thick] (0,2) rectangle (2,2.75) node[left, black, xshift=-20pt, yshift = -12pt] {\small $O_{3,1}$};

画 虚线

在draw的参数框里面加入[dashed],在这里标注虚线是为了表示在后续工序安排机器时,前面已经安排好序列的机器的结束时间。如果当前机器的结束时间,大于我加入的工序的上一个工序的完工时间,则说明当前机器不会出现等待时间。

\draw[color=orange ][very thick][dashed] (2,-1) -- (2,4) node[right,color=black,yshift = -10pt]{\large 2};
\draw[color=blue!50 ][very thick][dashed] (4,-1) -- (4,4) node[right,color=black,yshift = -10pt]{\large 4};
\draw[color=yellow][very thick][dashed] (3,-1) -- (3,4) node[right,color=black,yshift = -10pt]{\large 3};
\draw[<->][color=black][very thick][dashed](3,0.5)--(4,0.5) node[above, black, xshift=-15pt] {\small 1};
\draw[<->][color=black][very thick][dashed](2,2.5)--(4,2.5) node[above, black, xshift=-15pt] {\small 2};

完整代码

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}% GNUPLOT required
\begin{document}\pagestyle{empty}\begin{tikzpicture}[		dot/.style={circle,minimum size=8pt}]\coordinate (O) at (0, 0);\coordinate (A) at (1, 0);\coordinate (B) at (2, 0);\coordinate (C) at (3, 0);\coordinate (D) at (4, 0);\coordinate (E) at (5, 0);\coordinate (F) at (6, 0);\coordinate (G) at (7, 0);\coordinate (H) at (8, 0);\coordinate (I) at (9, 0);\coordinate (J) at (10, 0);\coordinate (K) at (11, 0);\coordinate (M1) at (0, 0.5);\coordinate (M2) at (0, 1.5);\coordinate (M3) at (0, 2.5);%axis\draw[-latex][very thick] (-0.5,0) -- (12,0) node[below] {\small $F1$};\draw[-latex][very thick] (0,-0) -- (0,4) node[above] {\small $Machine$};	\draw (O) node [below]{0} -- ++(0, 3pt) ;\draw (A) node [below]{1} -- ++(0,3pt) ;\draw (B) node [below]{2} -- ++(0, 3pt) ;\draw (C) node [below]{3} -- ++(0, 3pt) ;\draw (D) node [below]{4} -- ++(0, 3pt) ;\draw (E) node [below]{5} -- ++(0, 3pt) ;\draw (F) node [below]{6} -- ++(0, 3pt) ;\draw (G) node [below]{7} -- ++(0, 3pt) ;\draw (H) node [below]{8} -- ++(0, 3pt) ;\draw (I) node [below]{9} -- ++(0, 3pt) ;\draw (J) node [below]{10} -- ++(0, 3pt) ;\draw (K) node [below]{11} -- ++(0, 3pt) ;\draw (M1) node [left]{$M_1$} -- ++(0, 3pt) ;\draw (M2) node [left]{$M_2$} -- ++(0, 3pt) ;\draw (M3) node [left]{$M_3$} -- ++(0, 3pt) ;\filldraw[fill = yellow][thick] (0,0) rectangle (3,0.75) node[left, black, xshift=-30pt, yshift = -12pt] {\small $O_{1,1}$};\filldraw[fill = blue!50][thick] (0,1) rectangle (4,1.75) node[left, black, xshift=-40pt, yshift = -12pt] {\small $O_{2,1}$}; % 4表示长度 1.28 表示从 11.25 之间画高 green!30表示颜色深浅 0,1表示起点左下角, 0-4表示长 1-1.75表示宽\filldraw[fill = orange][thick] (0,2) rectangle (2,2.75) node[left, black, xshift=-20pt, yshift = -12pt] {\small $O_{3,1}$};\draw[color=orange ][very thick][dashed] (2,-1) -- (2,4) node[right,color=black,yshift = -10pt]{\large 2};\draw[color=blue!50 ][very thick][dashed] (4,-1) -- (4,4) node[right,color=black,yshift = -10pt]{\large 4};\draw[color=yellow][very thick][dashed] (3,-1) -- (3,4) node[right,color=black,yshift = -10pt]{\large 3};\draw[<->][color=black][very thick][dashed](3,0.5)--(4,0.5) node[above, black, xshift=-15pt] {\small 1};\draw[<->][color=black][very thick][dashed](2,2.5)--(4,2.5) node[above, black, xshift=-15pt] {\small 2};\filldraw[fill = blue!50][thick] (7,0) rectangle (9,0.75) node[left, black, xshift=-20pt, yshift = -12pt] {\small $O_{2,2}$};\filldraw[fill = blue!25][very thick][dashed](4,1) rectangle (6,1.75) node[left, black, xshift=-20pt, yshift = -12pt] {\small $O_{2,2}$};\draw[-latex][color=black][very thick][dashed](7,0.5)--(6,1.5);\end{tikzpicture}\end{document}

效果图

在这里插入图片描述

区域填充(补充知识)

比方说,我想在一个三角形区域内填充上灰色。那么我需要按顺序,无论是顺时针还是逆时针。按顺序的标出每个端点的位置例如 (2,4) – (0,0) – (1,0) 表示从(2,4) 到(0,0)到 (1,0) 的三角形。如果是四边形,五边形。也需要按顺序标出端点。

\fill[gray](2,4) -- (0,0) -- (1,0);

完整代码

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}% GNUPLOT required
\begin{document}\pagestyle{empty}\begin{tikzpicture}[		dot/.style={circle,minimum size=8pt}]%axis\draw[-latex][very thick] (-0.5,0) -- (7,0) node[below] {\LARGE $x$};\draw[-latex][very thick] (0,-0) -- (0,5) node[left] {\LARGE $\mu_{\tilde{F}}(x)$};	%TFN\draw[thick] (2,4) -- (0,0)node[below] {\small $m-b$};\draw[thick] (2,4) -- (1,0)node[below] {\small $m-a_l$};\draw[thick] (2,4) -- (4,0)node[below] {\small $m+a_r$};\draw[thick] (2,4) -- (6,0) node[below] {\small $m+b$};\draw[dashed][very thick] (2,4) -- (2,0) node[below] {\small $m$};\draw[dashed][very thick] (2,4) -- (0,4) node[left] {\LARGE $1$};	\fill[gray](2,4) -- (0,0) -- (1,0);\fill[gray](2,4) -- (4,0) -- (6,0);\filldraw[fill = gray][ultra thick] (4,4) rectangle (5,4.5) node[right, black, xshift = 10pt, yshift = -8pt, opacity=1] {\small uncertainty's footprint};\end{tikzpicture}\end{document}

效果图

在这里插入图片描述

后续将会继续写我在latex排版中遇到的各种各样的问题,例如公式换行,单边括号如何处理等问题

这篇关于TIKZ画FJSP中的甘特图-Trans必备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373394

相关文章

提升PrestaShop外贸电商网站安全的几款行业必备工具

提升PrestaShop外贸电商网站安全的几款行业必备工具 PrestaShop发展历程 PrestaShop是一款优秀且强大的外贸开源电商软件,我们开始使用PrestaShop始于2009年,那时PrestaShop还是0.9版本:界面清新,性能强悍,扩展友好等特性,既没有Magento的笨重,也没有ZenCart的古老,更没有OpenCart的脆弱,因此PrestaShop如雨后春笋,迅速

zblog自定义关键词和描述,zblog做seo优化必备插件

zblog自定义关键词和描述,zblog做seo优化必备插件     首先说下用到的一款插件:CustomMeta自定义数据字段 ,我们这里用到的版本是1.1,1.1+版增加了列表页标签支持!     插件介绍:文章,分类等添加自定义数据字段。1.1+版适用于 Z-Blog 2.0 B2以上版本。     在zblog2.0beta1里面,这个插件是集成到了程序里面,beta2里面默认没有了

程序员必备心理学——心流

心理学之心流 前言一、“心流”是什么?二、心流的好处二、如何进入心流心流状态的四个阶段第一个阶段:挣扎第二个阶段:放松第三个阶段:心流第四个阶段:巩固 进入心流的技巧 总结题外话 前言 你是否常常感觉自己明明学习了一整天,但是就是感觉没有太多的收获。这个时候除了你的学习方向等问题之外,也可能是你的学习方法太低效了。作者本人就经常有这种情况,好在偶然间在b站刷到一个大佬的这个心

Python基础—Python 中pip的8个必备命令

在Python开发中,pip是一个非常强大的包管理工具,用于安装和管理Python包。下面我将介绍8个pip的必备命令,并通过代码示例来讲解它们。 1. 安装包 pip install package_name 这个命令用于安装指定的Python包。例如,要安装requests库,你可以运行: pip install requests 2. 升级包 pip install --up

高效办公必备!图片转PDF功能,让工作更轻松

在数字化时代,将图片转换为PDF格式是一项非常实用的技能;无论是在工作、学习还是生活中,我们都可能遇到需要将图片转化为PDF格式的情况;今天通过这篇文章给大家分享四款好用的图片转pdf 的工具: 第一款:福昕转换器 这款专用于解决pdf与各种格式之间进行转换、合并以及音视频转文字等等各种需求的办公工具,其操作的界面非常简洁并直观,对新手伙伴非常友好;其次可以支持高达50个文件同时转换的意见批量

五一假期出行必备的高科技手册

今天小编看了眼朋友圈,发现无节操的同学真是太多了,你们出去玩就好了,为啥要发图呢……各种晒,简直要虐死上班狗啊。 不过掐指一算,小编期盼已久的五一马上就要来了。抱着拯救同样期待假期出行同胞们的想法,小编给大家准备了一份出行旅游必备的高科技手册,助大家防火防水防(yi)搭(yue)讪( pao),下面将会开启高(zhuang)冷(BI)模式,如有雷同,纯属故意。 攻略篇 攻略在手,说走就走。

【node.js 环境配置】爬虫必备-10分钟教你配置node.js环境

Node.js® 是基于Chrome 的 V8 JavaScript 引擎构建的 JavaScript 运行时。下面我们一起来安装。 下载地址:https://nodejs.org/zh-cn/download/ windows 安装,点击下载下来的node-v16.14.0-x64.msi 文件,进入安装界面。 这里改成D盘。 点击next 勾选&

Cozer必备!一站式解锁扣子全网最全插件集锦(二)

俗话说,工欲善其事必先利其器! 用过Coze的朋友都知道,插件在Coze里的重要性。插件库就相当于武器库,一个好的插件,就相当于一件趁手的兵器,可以让你事半功倍! 程哥精心整理了Coze最常用和好用的插件精选集,将分批送给大家,今天是第二批,包括2大类:图片处理和文档处理 图片处理 插件名称:图片理解 出品方:扣子官方 插件工具:imgUnderstand 功能描述:回答用户关于图像的

Docker必备命令集合,让你轻松驾驭容器化

Docker作为现代化应用程序的部署和管理平台,已经成为开发者和运维工程师的得力工具。但对于新手而言,面对众多的命令和参数,有时会感到困惑。本文将为你总结一组常用的Docker命令,助你快速上手并高效使用这一强大工具。 1. 基础命令 查看Docker版本 docker --version 使用该命令可以快速查看当前安装的Docker版本,确保你在使用最新的功能。 启动Docker服

面试必备技能-HiveSQL优化

Hive SQL基本上适用大数据领域离线数据处理的大部分场景。Hive SQL的优化也是我们必须掌握的技能,而且,面试一定会问。那么,我希望面试者能答出其中的80%优化点,在这个问题上才算过关。 Hive优化目标 在有限的资源下,执行效率更高常见问题 数据倾斜map数设置reduce数设置其他 Hive执行 HQL --> Job --> Map/Reduce执行计划 explain [ex