如何在 align* 中使用 \ifdefined

如何在 align* 中使用 \ifdefined

我需要使用\ifdefinedinsidealign来告诉 latex 对 pdf 和 tex4ht 使用不同的代码。但它给出了一个错误。

有没有什么办法可以解决这个问题(除了把ifdefined所有东西都放在外面,这会让事情变得复杂)。

这是 MW

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\usepackage{array}

\begin{document}

\begin{align*}    
R_{2} = R_{2}-R_{1} &\Longrightarrow\hspace{5pt}
\ifdefined\HCode
   \left[\begin{array}{@{}ccc|c@{}}
                       0&0&4&0\\ 
                       0&0&0&0\\ 
                       0&0&2&0 
          \end{array}
    \right]               
\else
     \left[             
         \begin{array}{@{}ccc!{\color{red}\vline width 0.6pt}c@{}}
                       0&0&4&0\\ 
                       0&0&0&0\\ 
                       0&0&2&0
         \end{array}
     \right]               
\fi      
\end{align*}
\end{document}

编译时lualatex出错

(/usr/local/texlive/2020/texmf-dist/tex/latex/microtype/mt-PalatinoLinotype.cfg) (/usr/local/texlive/2020/texmf-dist/tex/latex/microtype/mt-msa.cfg) (/usr/local/texlive/2020/texmf-dist/tex/latex/microtype/mt-msb.cfg))
! Incomplete \ifx; all text was ignored after line 21.
<inserted text>
\fi
<*> foo3.tex

?

TL 2020

答案1

您可以将其放入一个组中:

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\usepackage{array}

\begin{document}

\begin{align*}    
R_{2} = R_{2}-R_{1} &\Longrightarrow\hspace{5pt}
{\ifdefined\HCode
   \left[\begin{array}{@{}ccc|c@{}}
                       0&0&4&0\\ 
                       0&0&0&0\\ 
                       0&0&2&0 
          \end{array}
    \right]               
\else
     \left[             
         \begin{array}{@{}ccc!{\color{red}\vline width 0.6pt}c@{}}
                       0&0&4&0\\ 
                       0&0&0&0\\ 
                       0&0&2&0
         \end{array}
     \right]               
\fi}     
\end{align*}
\end{document}

但我不明白为什么你在每个分支中重复这个矩阵,

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\usepackage{array}

\begin{document}

\begin{align*}    
R_{2} = R_{2}-R_{1} &\Longrightarrow\hspace{5pt}
\left[
\begin{array}{@{}ccc!{\ifdefined\HCode |\else\color{red}\vline width 0.6pt\fi}c@{}}
                       0&0&4&0\\ 
                       0&0&0&0\\ 
                       0&0&2&0 
          \end{array}
    \right]               
\end{align*}
\end{document}

答案2

原始\if命令很难用。您通常必须确保在执行分支之前找到\else和。使用etoolbox 之类的用户命令可以隐藏这一点:\fi\ifdef

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\usepackage{array}
\usepackage{etoolbox}

\begin{document}

\begin{align*}
R_{2} = R_{2}-R_{1} &\Longrightarrow\hspace{5pt}
\ifdef{\HCode}
   {\left[\begin{array}{@{}ccc|c@{}}
                       0&0&4&0\\
                       0&0&0&0\\
                       0&0&2&0
          \end{array}
    \right]}
   {\left[
         \begin{array}{@{}ccc!{\color{red}\vline width 0.6pt}c@{}}
                       0&0&4&0\\
                       0&0&0&0\\
                       0&0&2&0
         \end{array}
     \right]}
\end{align*}
\end{document}

相关内容