Как преобразовать $...$ в \(...\)

Как преобразовать $...$ в \(...\)

Итак, согласно Почему \[ ... \] предпочтительнее, чем $$ ... $$?и Являются ли \( и \) предпочтительнее знаков доллара для математического режима? Мне следует использовать \(...\)вместо $...$и \[...\]вместо $$...$$.

Но что делать, если у меня есть документ, в котором я уже немного использовал знаки доллара? Как мне их преобразовать? Простой поиск и замена не сработает, так как:

  1. Ему неважно, является ли $$ началом или концом; и
  2. В тексте я использую знак доллара (для обозначения валюты).

Есть ли у кого-нибудь дельный совет по этому поводу?

решение1

Это во многом будет зависеть от того, какой редактор вы используете и какие функции он предоставляет, поэтому я сомневаюсь, что будет единый ответ; однако, если ваш редактор хорошо поддерживает регулярные выражения, то это должно быть довольно просто.

Вот как вы можете подобрать$...$

/\s\$(.|\n)+?\$/g

и аналогично, сопоставление для $$...$$:

/\s\$\$(.|\n)+?\$\$/g

Это не будет соответствовать знакам доллара, поскольку их нужно экранировать с помощью\$ а шаблон выше требует любой из пробельных символов перед знаком доллара (пробел, табуляция или новая строка). Вы можете увидеть хорошую визуализацию для этогоздесьиздесьсоответственно.

Если ваш редактор поддерживает sфлаг Perl, то вы можете упростить (.|\n)+?его до значения .+?, которое .будет соответствовать и новым строкам.

Наконец, если сложить все это вместе и сделать замену, то получится:

s/(\s)\$(.+?)\$/\1\(\2\)/sg

Обратите внимание, что я не экранирую некоторые символы, поскольку это будет зависеть от конкретной реализации regex. В частности, групповые скобки могут потребовать \(...\)и +, ?а обратные косые черты в замене также могут потребовать экранирования в зависимости от того, какую реализацию regex вы используете.

Если вы находитесь в командной строке и у вас установлен Perl, то следующие две команды должны помочь:

perl -077pi.bak -e 's/(\s)\$\$(.+?)\$\$/\1\\[\2\\]/sg' document.tex
perl -077pi.bak -e 's/(\s)\$(.+?)\$/\1\\(\2\\)/sg' document.tex

Обратите внимание, что это будетнетсоответствует чему угодно в самом начале файла; однако я не думаю, что это будет большой проблемой, поскольку начало файла обычно будет комментарием или, по крайней мере, \documentclass.

решение2

Single $хороши и поддерживают синтаксис для встроенной математики и даже $$в основном подходят для отображения математики. Они плохой стиль, но в большинстве случаев (если вы не используете fleqn) они дадут тот же вывод, что и , \[..\]так что вы можете просто изменить $$на \[как часть общего редактирования, когда вы редактируете формулы, если вы не уверены в замене регулярных выражений, нет острой необходимости делать глобальное редактирование документа, которое может принести больше вреда, чем пользы, если вы неправильно поняли регулярное выражение. Так что попробуйте использовать и \[дальше, но не теряйте сон из-за того, $$что уже есть в вашем документе:-)

Связанный контент