zoukankan      html  css  js  c++  java
  • LaTeX 自动避免重复内容

    在编辑自动化文档时,很容易出现在文档多处提及相同内容的情况。例如,描述某具体设备的图片,在多个工艺中都会用到,而又无法确定工艺出现顺序,或者对于不同企业,工艺不尽相同。这时我们可能会希望,latex帮助我们保留第一次出现的图片,而不输出后出现的相同图片,并且维护所有对这张图片的引用。

    要实现此功能,直觉地感到:

    1. 代码要能判断某个指令或标签是否已经被定义;
    2. 若已经定义,则不执行任何操作;
    3. 若未定义,则定义之,并输出内容。

    在tex底层,存在一个识别指令名是否被定义的指令:@ifundefined{指令名不带斜杠}{执行内容}

    对于该指令,有两点需要注意:

    1. 指令的名称包含符号 @,需要在使用之前执行makeatletter将其视为一般字符,在之后执行makeatother恢复其为特殊符号;
    2. 第一个参数是不带斜杠的指令名,允许由其他宏指令组成。

    而在已知一个要定义的名称,而这个名称需要由上下文决定的宏指令构成时, ewcommand就不适用了,因为它不支持从文本创建指令。此时需要tex的另一个指令:@namedef{指令名不带斜杠}{执行内容}

    对于该指令,也同样需要注意之前提到了两点注意事项。

    下面给出一个tex文件片段:

    .......
    
    
    ewcommandUserDefinedVar{Once}
    
    工艺1采用了设备A,见图
    ef{Fig:DeviceAUserDefinedVar}。
    
    makeatletter
    @ifundefined{CommandDeviceAUserDefinedVar}{
    	egin{figure}[hbt]
    	  centering small
    	  egin{tabular}{c}
    	  includegraphics[width=0.8	extwidth]{ImageDevA} \
    	  end{tabular}
    	  caption{设备A示意图}label{Fig:DeviceAUserDefinedVar}
    	end{figure}
    	@namedef{CommandDeviceAUserDefinedVar}{}
    }
    makeatother
    
    % 
    enewcommandUserDefinedVar{Twice}
    
    工艺2也采用了设备A,见图
    ef{Fig:DeviceAUserDefinedVar}。
    
    makeatletter
    @ifundefined{CommandDeviceAUserDefinedVar}{
    	egin{figure}[hbt]
    	  centering small
    	  egin{tabular}{c}
    	  includegraphics[width=0.8	extwidth]{ImageDevA} \
    	  end{tabular}
    	  caption{设备A示意图}label{Fig:DeviceAUserDefinedVar}
    	end{figure}
    	@namedef{CommandDeviceAUserDefinedVar}{}
    }
    makeatother
    
    % 
    enewcommandUserDefinedVar{ThirdTime}
    
    工艺3同样采用了设备A,见图
    ef{Fig:DeviceAUserDefinedVar}。
    
    makeatletter
    @ifundefined{CommandDeviceAUserDefinedVar}{
    	egin{figure}[hbt]
    	  centering small
    	  egin{tabular}{c}
    	  includegraphics[width=0.8	extwidth]{ImageDevA} \
    	  end{tabular}
    	  caption{设备A示意图}label{Fig:DeviceAUserDefinedVar}
    	end{figure}
    	@namedef{CommandDeviceAUserDefinedVar}{}
    }
    makeatother
    
    .......

    此片段在编译后,只会出现一幅图片,后两段的引用指向第一次出现的标签位置。

    如果取消掉注释的两行,则用户变量在过程中变化,编译后会出现3幅图片,每个段落引用各自的标签位置。

  • 相关阅读:
    fern没有扫描到任何ap
    kali软件的必须知道的那些事
    我的kali学习计划
    arping 自己
    kali密码破解
    kali目录修改
    我的电脑网络不通了
    收藏链接的正确方法
    maltego的 卡 慢 没反应 的问题解决方法
    git报错 failed: The TLS connection was non-properly terminated.
  • 原文地址:https://www.cnblogs.com/heroius/p/11530879.html
Copyright © 2011-2022 走看看