0

How to create a TeXstudio macro to apply "Align Columns" for all matrices I want

After learning about about the command Align Columns I immediately fell in love with it and created a shortcut (Ctrl + Alt + T == Alt Gr + T) to use it in a blink of an eye. So far so good.

Recently I learned I could execute commands with TeXstudio's macros and not just use it to insert predefined text.

At this point I asked if it was possible to automatize the whole Search and Align Columns manual procedure.

I found the following infos about it:

Unfortunately, I could not install latexindent so I must find a way around, and I don't know the syntax enough to create from scratch.

I searched for info and tried some but I have no idea how to perform something like Align Columns of any shortcut in the MACRO environment.

The idea is have something like this

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{equation}
\begin{split}
  \begin{pmatrix}
    a             &              b \\
    c             &           d
  \end{pmatrix}  \\
  \begin{bmatrix}
    a             &        b \\
    c             &                 d
  \end{bmatrix}  \\
  \begin{Bmatrix}
    a             &                 b\\
    c             &            d
  \end{Bmatrix}   \\
  \begin{vmatrix}
    a             &       b \\
    c             &              d
  \end{vmatrix}  \\
  \begin{Vmatrix}
    a             &                  b \\
    c             &                  d
  \end{Vmatrix}  \\
\end{split}
\end{equation}

\end{document}

Apply the macro, which sketch I let below

%SCRIPT
options = "g"
scope = editor.document().cursor(0, 0, -1);
editor.find("matrix", options, scope, "");
//eval("AlignColumns");
//eval("Ctrl + Alt + T");
//editor.findNext();

enter image description here

and get the same result as manually go around using Search (F3) and Align Columns (Alt Gr + T) the whole document.

Adding array, tabular, split, and others environments that use & would also be something interesting.

enter image description here

3
  • 1
    Latexindent does this. If you find an alternative, let me know :) (author of latexindent) – cmhughes Nov 25 '20 at 18:35
  • @cmhughes, indeed, I tried to use latexindent, I saw your Youtube Video. latexindent does much more than just aligning tables and matrices, but I could not install Perl at the computer I use, therefore I asked for a specific workaround. Find a subset of word, apply the command. I don't know how to apply to command via macro. – FHZ Nov 25 '20 at 20:35
  • 1
    If you're on Windows, there is a Windows executable available. You just need it and default settings.yaml – cmhughes Nov 25 '20 at 21:11
1

Very simple macro to work around

It took a while but I found out TeXstudio command app.simulateKeyPress("<Keys>").

Combining the find I needed with the shortcut I'd already defined ("Ctrl+Alt+T"), I could emulate the same combinations I used manually into a single key combination due macro's shortcut.

%SCRIPT
editor.find("matrix", true, true, false, false);
app.simulateKeyPress("Ctrl+Alt+T");
//editor.findNext();

I must press the shortcut I chose (Shift+F1) twice, since I'm just looking for the word matrix.

I shall recognize this is not the most elegant solution, I just combined two tools. Probably someone with more skills than me can come with a better solution searching in a list of words or some other trick I don't know.

enter image description here

2
  • @cmhughes, this answer was the best I could perform with my current knowledge. – FHZ Nov 25 '20 at 23:26
  • Formatting code is tricky :) – cmhughes Nov 26 '20 at 12:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.