LaTeX 自动避免重复内容
在编辑自动化文档时,很容易出现在文档多处提及相同内容的情况。例如,描述某具体设备的图片,在多个工艺中都会用到,而又无法确定工艺出现顺序,或者对于不同企业,工艺不尽相同。这时我们可能会希望,latex帮助我们保留第一次出现的图片,而不输出后出现的相同图片,并且维护所有对这张图片的引用。
要实现此功能,直觉地感到:
- 代码要能判断某个指令或标签是否已经被定义;
- 若已经定义,则不执行任何操作;
- 若未定义,则定义之,并输出内容。
在tex底层,存在一个识别指令名是否被定义的指令:\@ifundefined{指令名不带斜杠}{执行内容}
对于该指令,有两点需要注意:
- 指令的名称包含符号 @,需要在使用之前执行\makeatletter将其视为一般字符,在之后执行\makeatother恢复其为特殊符号;
- 第一个参数是不带斜杠的指令名,允许由其他宏指令组成。
而在已知一个要定义的名称,而这个名称需要由上下文决定的宏指令构成时,\newcommand就不适用了,因为它不支持从文本创建指令。此时需要tex的另一个指令:\@namedef{指令名不带斜杠}{执行内容}
对于该指令,也同样需要注意之前提到了两点注意事项。
下面给出一个tex文件片段:
.......
\newcommand\UserDefinedVar{Once}
工艺1采用了设备A,见图\ref{Fig:DeviceA\UserDefinedVar}。
\makeatletter
\@ifundefined{CommandDeviceA\UserDefinedVar}{
\begin{figure}[hbt]
\centering \small
\begin{tabular}{c}
\includegraphics[width=0.8\textwidth]{ImageDevA} \\
\end{tabular}
\caption{设备A示意图}\label{Fig:DeviceA\UserDefinedVar}
\end{figure}
\@namedef{CommandDeviceA\UserDefinedVar}{}
}
\makeatother
% \renewcommand\UserDefinedVar{Twice}
工艺2也采用了设备A,见图\ref{Fig:DeviceA\UserDefinedVar}。
\makeatletter
\@ifundefined{CommandDeviceA\UserDefinedVar}{
\begin{figure}[hbt]
\centering \small
\begin{tabular}{c}
\includegraphics[width=0.8\textwidth]{ImageDevA} \\
\end{tabular}
\caption{设备A示意图}\label{Fig:DeviceA\UserDefinedVar}
\end{figure}
\@namedef{CommandDeviceA\UserDefinedVar}{}
}
\makeatother
% \renewcommand\UserDefinedVar{ThirdTime}
工艺3同样采用了设备A,见图\ref{Fig:DeviceA\UserDefinedVar}。
\makeatletter
\@ifundefined{CommandDeviceA\UserDefinedVar}{
\begin{figure}[hbt]
\centering \small
\begin{tabular}{c}
\includegraphics[width=0.8\textwidth]{ImageDevA} \\
\end{tabular}
\caption{设备A示意图}\label{Fig:DeviceA\UserDefinedVar}
\end{figure}
\@namedef{CommandDeviceA\UserDefinedVar}{}
}
\makeatother
.......
此片段在编译后,只会出现一幅图片,后两段的引用指向第一次出现的标签位置。
如果取消掉注释的两行,则用户变量在过程中变化,编译后会出现3幅图片,每个段落引用各自的标签位置。
LaTeX 自动避免重复内容的更多相关文章
- 在CentOS 6.7中安装 latex2html, 实现 latex 自动转化为 word
由于latex文档生成的pdf不便于提供审阅和修改,亟需一个软件实现从latex向word文档的自动转换( 如何把Latex自动转为Word 介绍了由latex2html 可实现这个功能,这也是初衷) ...
- ASP.NET的SEO:使用.ashx文件——排除重复内容
本系列目录 不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为"重复内容",如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高.所以我们应尽量避免各种重复内 ...
- 如何给wordpress首页自动显示文章内容的第一个图片
敏捷个人手机应用中使用到的数据来源于wordpress中,因为自己写的页面,所以可以自己写代码获取文章内容的第一个图片作为文章缩略图来显示,这样用户看到首页时图文并茂,感觉会好一些. 现在后台简单的使 ...
- JS实现复制网页内容自动加入版权内容代码和原文链接
JS实现复制网页内容自动加入版权内容代码和原文链接 实现代码:在body内放入如下代码即可: <script type="text/javascript"> var S ...
- 页面滚动动态加载数据,页面下拉自动加载内容 jquery
<!DOCTYPE=html> <html> <head> < script src="js/jquery.js" type=" ...
- altium6.x中自动删除重复走线的位置
在protel 2004 DXP中,“自动删除走线”的位置就在"PCB Editor"的默认页面,非常好找. 但是升级到了altium 6.7,6.9之后,很多人就找不到这个了. ...
- JavaScript下拉框去除重复内容
下拉框去除重复内容 <script type="text/javascript" src="http://www.joleye.com/libraries/java ...
- oracle中的rowid--伪列-删除表中的重复内容-实用
1.rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行. 2.rowid是存储在索引中的一组既定的值(当行确定后).我们可以像表中普通的列一样将它选出来. 3 ...
- Jquery页面滚动动态加载数据,页面下拉自动加载内容
<!DOCTYPE=html> <html> <head> <script src="js/jquery.js" type="t ...
随机推荐
- mongoDB的CRUD的总结
今天开始接触非关系型数据库的mongoDB,现在将自己做的笔记发出来,供大家参考,也便于自己以后忘记了可以查看. 首先,mongoDB,是一种数据库,但是又区别与mysql,sqlserver.orc ...
- 天气预报APP(1)
一个天气预报APP至少应该具备以下功能: *可以罗列出全国所有的省.市.县: *可以查看全国任意城市的天气信息: *可以自由的切换城市,去查看其他城市的天气: *提供手动更新以及后台自动更新天气的功能 ...
- android ——调用摄像头拍照和相册
先在布局文件中加入两个按钮和一个图片控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...
- imageloader+图片压缩
public class MainActivity extends AppCompatActivity { private ImageView ivIcon; @Override protected ...
- Mysql优化-mysql分区
背景:由于我负责i西科教务处系统,i西科用户量达到20000人左右,那么假设每人每星期10门讲课,数据库记录信息将是20万条,如果不将课程表进行分区或分表,就会造成爆表的情况,如此看来,分区是必须要做 ...
- 并发模型与IO模型梳理
并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见.由于go语言的兴起,CSP模型也越来越受关注.基于锁的共享内存模型 ...
- Hive 系列(四)—— Hive 常用 DDL 操作
一.Database 1.1 查看数据列表 show databases; 1.2 使用数据库 USE database_name; 1.3 新建数据库 语法: CREATE (DATABASE|SC ...
- JVM(十二):方法调用
JVM(十二):方法调用 在 JVM(七):JVM内存结构 中,我们说到了方法执行在何种内存结构上执行:Java 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们 ...
- Mac忘记MySQL root密码解决方法(亲测有效)
重置MySQL root密码 重置MySQL root用户的密码: 1)新建一个文本文件sql.txt,写入修改用户密码的SQL语句. MySQL 5.7.6及更高版本写这句: ALTER USER ...
- MySQL之mysqldump的使用
一.mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具. 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的inser ...