latex 多行注释_[LaTeX 尝试] 扩展 comment 环境的结束条件

本文已加入专栏文章目录,归入「进阶使用」文章系列。

基本用法

LaTeX 的comment 宏包(https://ctan.org/pkg/comment)提供了相当于通用编程语言中多行注释的功能。以宏包默认提供的 comment 环境为例,以下输入(几乎)不会输出任何内容。

begin{
    comment}
  avd
  fi
  lipsum
end{
    comment}

使用 comment 环境,比简单的 iffalse <contents> fi 形式的注释更安全和可靠。 如果 <contents> 的展开结果中包含(未与 if<xxx> 配对的) elsefi,这种简单的「注释」就会失效。

使用限制

comment 环境,和用户使用该宏包提供的 includecomment 命令制定的其他(注释)环境,在用于「注释环境内容」时,受到以下限制[1]

  • end{comment} 独占一行,且之前(从行首开始)和之后(直到换行符前)都不包含任何其他内容

宏包文档中的原文是(从源码里反映的实际的约束条件,要稍微宽松一些)

The opening and closing commands (aka begin{comment} and end{comment}) should appear on a line of their own. No starting spaces, nothing after it.

以下的两种,都是错误的用法

%% 错误用法 1,"end{comment}" 之后包含额外符号 "%"
end{
    comment}%

%% 错误用法 2,"end{comment}" 之前包含额外符号 " "
  end{
    comment}

如果还想使用 comment 宏包提供的其他功能,如在「先把环境内容输出到外部文件,之后再插入此外部文件」,begin{comment} 也需遵守类似规则。

尝试突破限制

以上的限制,使得 end{comment} 无法参与缩进,或带来不便。以「允许 end{comment} 所在行的行首包含空格」为改进目标,以下提供一种尝试。

documentclass{
    article}
usepackage{
    comment}

makeatletter
% helper
def@err#1{
    PackageError{
    COMMENT}{
    #1}{}}

% new
defx@test#1#2@empty{
    %
  if#1 expandaftert@testelseexpandafterf@testfi{
    #1}{
    #2}}
deft@test#1#2{
    x@test #2@empty}  % true clause
deff@test#1#2{
    deftest{
    #1#2}}    % false clause

% renew
{
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值