我真的很喜欢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
名为path
、node
、和其他任何命令的命令:draw
mysettings.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
设置0
为latexindent.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
。我知道这个解决方案并不理想,因为它需要一些额外的标记,但替代方案(括号匹配和对齐之间的斗争)让我害怕。