if-else-fi结构体

if-else-fi结构体

我真的很喜欢latexindent可以很好地缩进文档中的大部分代码。但是,有些情况下它latexindent并没有按照我的要求执行。

这些情况通常涉及我想缩进的代码,但这些代码没有被环境/括号/方括号包裹。因此,可以说,它们最终会因为缺乏“标识符”而被忽略。

<...>以下示例说明了我的问题。在前两个示例中,不是缩进latexindent。在第三个中,矩阵的内容作为一个整体将缩进(因为它们被包裹{}),但&\\不一定对齐(但如果这是在环境中,它们就会对齐array)。

  • LaTeX 条件语句

    \if
      <...>
    \else
      <...>
    \fi
    
  • 跨越多行的 TikZ 路径。例如,latexindent不会产生以下缩进:

    \path 
      <some complicated operations>
    ;
    
  • TikZ 命令中&的对齐:\\\matrix

    \matrix[matrix of nodes]{
      looooong cell & looooong cell \\
      short cell    & short cell    \\
    };
    

所以我的问题是:有没有办法配置文件.yaml来处理上述问题。

答案1

最新版本latexindent.pl可在github;一旦我完成了更多测试,我就会将其发布到ctan。这个最新版本解决了您的问题,还有一些其他问题 - 让我们逐一介绍它们(所有这些也都包含在文档中)。

if-else-fi结构体

这些可以通过使用字段来控制 -constructIfElseFi在此字段中找到的任何命令都将进行latexindent.pl查找\else\fi命令。

constructIfElseFi:
     ifnum: 1
     ifodd: 1

当然,您可以向其中添加任何其他命令(我将defaultSettings.yaml在今天晚些时候更新更全面的列表)

样品前

\ifnum\radius>5
\ifnum\radius<16
\draw[decorate,...
\fi
\fi

样品后

\ifnum\radius>5
    \ifnum\radius<16
        \draw[decorate,...
    \fi
\fi

tikz paths spanning several lines

新版本包含在命令latexindent.pl后添加缩进的开关\item

indentAfterItems:
    itemize: 1
    enumerate: 1
    list: 1

并且你可以item指定任何你喜欢的名字

itemNames:
    item: 1
    myitem: 1

因此,您可以通过在某个文件中使用以下代码(例如)latexindent.pl来欺骗自己,让它认为tikzpicture环境中有item名为pathnode、和其他任何命令的命令:drawmysettings.yaml

indentAfterItems:
   tikzpicture: 1
itemNames:
    path: 1
    node: 0
    draw: 1

样品前

\begin{tikzpicture}
\path
<some complicated operations>
;
\node bunch of other code
<some complicated operations>
<some complicated operations>
\draw bunch of other code
<some complicated operations>
<some complicated operations>
\end{tikzpicture}

样品后

\begin{tikzpicture}
    \path
        <some complicated operations>
        ;
        \node bunch of other code
        <some complicated operations>
        <some complicated operations>
    \draw bunch of other code
        <some complicated operations>
        <some complicated operations>
\end{tikzpicture}

请注意,因为我已将node设置0latexindent.pl不是将其视为item命令 - 将其切换为1,您将获得以下内容:

\begin{tikzpicture}
    \path
        <some complicated operations>
        ;
    \node bunch of other code
        <some complicated operations>
        <some complicated operations>
    \draw bunch of other code
        <some complicated operations>
        <some complicated operations>
\end{tikzpicture}

环境之外的协调

“括号匹配”程序和“对齐”程序非常强大,但我不想让它们争夺控制权 - 因此,为了回答你的最后一个请求,我添加了对以下标记的支持

\matrix{%
%* \begin{tabular}
 1 & 2 & 3 & 4 \\
 5 &   & 6 &   \\
%* \end{tabular}
}

您可以使用%*后跟任意数量的空格(也可以没有)以及您在中指定的任何环境lookForAlignDelims。我知道这个解决方案并不理想,因为它需要一些额外的标记,但替代方案(括号匹配和对齐之间的斗争)让我害怕。

相关内容