格式化丑陋的代码

格式化丑陋的代码

虽然我经常对输出的 PDF 结果感到满意,但我的 latex 代码却经常变得非常丑陋。代码可读性差使得编辑过程非常困难。有没有什么简单的技巧可以格式化我的代码以使其更具可读性?

以下是一个例子:

    \begin{align*}
    H_3\ket{\psi(t)} &= \left(\hbar\epsilon \int_{z_0}^{z_0+l}E_a^{(-)} E_a^{(+)} E_b^{(-)} E_b^{(+)} dz \right) \ket{\psi(t)} \\
    &= \underbrace{\left(\hbar\epsilon \int_{z_0}^{z_0+l}E_a^{(-)} E_a^{(+)} E_b^{(-)} E_b^{(+)} dz \right)}_{\text{equation \ref{H3}}} \underbrace{\left( \sum_n \sum_m c_{nm}(t) e^{-2 \pi i(n+m)c t/L} \ket{1_n}_a\ket{1_m}_b \right)}_{\ket{\psi(t)}} \\
    \end{align*}

你会如何清理它?就我个人而言,我感兴趣的是添加新行,使每行更具可读性。但是通过缩进或将我的代码拆分成不同的行,我收到了错误消息。

答案1

这不是一个真正的技巧,但我通常将长方程式放在几行上,并使用 2 个空格系统地缩进代码层以提高可读性。

只需确保环境中没有空行align,否则您将收到错误! Paragraph ended before \align* was complete.

例如,当方程式很长时,我会匹配对\left \right和对的缩进:\int dz

\documentclass[a4paper,11pt]{article}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{braket}

\begin{document}

\begin{align*}
  H_3 \ket{\psi(t)}
%%%%
  &= \left(
       \hbar\epsilon
       \int_{z_0}^{z_0+l}
         E_a^{(-)} E_a^{(+)} E_b^{(-)} E_b^{(+)}
       dz
     \right)
     \ket{\psi(t)} \\
%%%%
  &= \underbrace{
       \left(
         \hbar\epsilon
         \int_{z_0}^{z_0+l}
           E_a^{(-)} E_a^{(+)} E_b^{(-)} E_b^{(+)}
         dz
       \right)
     }_{\text{equation \ref{H3}}}
     \underbrace{
       \left(
         \sum_n \sum_m
           c_{nm}(t)
           e^{-2 \pi i(n+m)c t/L}
           \ket{1_n}_a \ket{1_m}_b
       \right)
     }_{\ket{\psi(t)}} \\
\end{align*}

\end{document}

额外%%%%帮助我找到等号。

答案2

使代码复杂化的一件事是大量形式为^{(...的表达式)}。我使用以下代码为它们定义了一个快捷方式:

\catcode`\"=13
\newcommand*{"}[1]{^{(#1)}}

这意味着a"1成为A(1)a"{10}变成A(10

我还会为你经常使用的代码段定义宏(例如你已经有了\ket,这很好)。例如,你可以尝试

\newcommand{\paren}[1]{\left(#1\right)}

(或使用\DeclarePairedDelimiter)。

您多次使用的另一个量(可能也在文档的其余部分中)是积分,因此让我们将其包装在宏中:

\newcommand{\Eabint}{\int_{z_0}^{z_0+l} E_a"- E_a"+ E_b"- E_b"+ dz}

我注意到的最后一件事是,这些\underbrace命令使代码更难阅读/更混乱。只要没有空行,您就可以将它们放在自己的行上。

完成所有这些更改后,代码看起来不再那么混乱了:

\begin{align*}
H_3\ket{\psi(t)} &= \paren{\hbar\epsilon \Eabint} \ket{\psi(t)} \\
&= \underbrace{
     \paren{\hbar\epsilon \Eabint}
   }_{\text{equation \ref{H3}}}
   \underbrace{
     \paren{\sum_n \sum_m c_{nm}(t) e^{-2 \pi i(n+m)c t/L} \ket{1_n}_a\ket{1_m}_b}
   }_{\ket{\psi(t)}} \\
\end{align*}

相关内容