arara 是否在编译期间继续检查内容?

arara 是否在编译期间继续检查内容?

我的问题

如何替换代码中的字符串期间汇编。

语境

到目前为止,我arara在代码开头使用类似“魔术”的行来调用latexindent

% arara: pdflatex: { shell: yes }
% arara: pdflatex: { shell: yes }
% arara: indent: { overwrite : yes }
% arara: indent: { trace : yes }

它完美地纠正了缩进。

我觉得我可以用arara 在编译期间系统地纠正排版问题和/或替换字符串。

我对通过 arara 实现的这项能力的看法有误吗?

如果没有,我应该从哪里开始练习编写一个简单的规则,检查例如逗号前是否没有空格," , "并将其替换为正确的", "

由于我的编码知识有限,我只能在编辑器中手动“查找和替换”。效率低下...

答案1

在您的问题中,您说:

如果没有,我应该从哪里开始练习编写一个简单的规则来检查,例如,逗号前没有空格“,”,并用正确的“,”替换。

我提出了一个解决方案latexindent.pl,该解决方案可用且有完整的文档记录卡坦并且应该包含在您的 LaTeX 发行版中或在其中可用。

作为示例,我使用以下文件myfile.tex

我的文件.tex

% arara: indent: {replacement: noverb, settings: local, where: mysettings.yaml, output: tmp.tex}
Space before a comma , no space before comma,and no space after.

Multiple spaces before   ,and no space after,    and more.

Multiple spaces before   ,       and after.

呼吁arara

特别注意,arara

% arara: indent: {replacement: noverb, settings: local, where: mysettings.yaml, output: tmp.tex}

它告诉latexindent.pl使用以下内容进行操作

latexindent.pl -l=mysettings.yaml -o tmp.tex myfile.tex -rv

您可以通过检查来验证这一点arara.log开关latexindent.pl都有完整的记录。

我的设置.yaml

YAML 文件mysettings.yaml由以下内容调用latexindent.pl并包含以下内容

replacements:
  -
    # remove all horizontal spaces before commas
    #   note: \h+ means 'at least one horizontal space'
    substitution: s/\h+,/,/sg
  -
    # replace multiple horizontal spaces after commas with single space
    #   note: \h{2,} means 'at least two horizonal spaces'
    substitution: s/,\h{2,}/, /sg
  -
    # add spaces following commas, if there isn't one already
    #   note: \H means 'a character that isn't horizontal whitespace'
    substitution: s/,(\H)/, $1/sg

输出: tmp.tex

调用arara表示将文件输出到tmp.tex如下位置

% arara: indent: {replacement: noverb, settings: local, where: mysettings.yaml, output: tmp.tex}
Space before a comma, no space before comma, and no space after.

Multiple spaces before, and no space after, and more.

Multiple spaces before, and after.

笔记

  • 有几个替换开关,latexindent.pl记录在https://latexindentpl.readthedocs.io/en/latest/sec-replacements.html
  • mysettings.yaml已经使用了示例常用表达,例如,参见 Jeffrey EF Friedl 的《掌握正则表达式》。ISBN:0596002890
  • 如果你打算使用overwrite的机制latexindent.pl,请务必在将其用于任何重要的事情之前仔细检查输出,并注意它始终会进行至少一次备份
  • 上述替换几乎肯定可以组合成一个替换,但我故意将它们分开放置,希望这样更容易理解;如果您愿意,也许您可​​以尝试将它们组合起来:)

相关内容