LaTeX 自动避免重复内容
2019-09-16 23:26
2321 查看
在编辑自动化文档时,很容易出现在文档多处提及相同内容的情况。例如,描述某具体设备的图片,在多个工艺中都会用到,而又无法确定工艺出现顺序,或者对于不同企业,工艺不尽相同。这时我们可能会希望,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幅图片,每个段落引用各自的标签位置。
相关文章推荐
- Java自动根据文件内容的编码来读取避免乱码
- tableview 在重用时如何避免内容重复
- 站长须知:HTTP迁移HTTPS时,如何避免发生重复内容问题
- java自动根据文件内容的编码来读取避免乱码
- Latex 表格内文字过长自动换行 & 表格内单元格内容强制换行
- 重复打印相同内容(Doc档)的时候自动生成打印编号
- java自动根据文件内容的编码来读取避免乱码
- LaTeX中table使用小技巧:全局调整字号及单元格内容自动换行
- 除主键外 其余内容相同 避免重复插入的办法
- 检测如果有重复的内容自动在后面加数字
- 百度已支持Canonical标签 避免重复内容收录
- 用Python实现应用Last-Modified和ETag避免下载重复内容
- WWW与不带WWW区别 用link rel="canonical"来避免搜索引擎抓取重复内容
- Masterha-manager避免自动关闭的方法
- mysql忽略主键冲突,避免重复插入的几种方式
- 如何避免糟糕的用户体验--从视觉效果,反应速度,网站内容上浅析
- 如何让myeclipse自动提示内容
- MySql避免重复插入记录的几种方法
- “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法
- js异步ajax实现避免页面重复提交