我的问题
如何替换代码中的字符串期间汇编。
语境
到目前为止,我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
,请务必在将其用于任何重要的事情之前仔细检查输出,并注意它始终会进行至少一次备份 - 上述替换几乎肯定可以组合成一个替换,但我故意将它们分开放置,希望这样更容易理解;如果您愿意,也许您可以尝试将它们组合起来:)