如何为 \tkzTabLine 创建更多选项?

如何为 \tkzTabLine 创建更多选项?

我使用\usepackage{tkz-tab}创建符号表。例如,为了确定下面不等式的解,我们使用表格: 在此处输入图片描述

由以下代码生成:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{tkz-tab}

\begin{document}
\begin{tikzpicture}
\tkzTabInit[lgt=3,espcl=2]
{/1.2, $5x-1$ /.8, $x+3$ /.8, $\dfrac{5x-1}{x+3}$ /1.2} % first column
{$-\infty$,$-3$,$\dfrac{1}{5}$,$\infty$} % first row
\tkzTabLine { ,-,t,-,z,+, } % second row
\tkzTabLine {,-,z,+,t,+,} % third row
\tkzTabLine {,+,d,-,z,+,} % last row
\end{tikzpicture}
\end{document}

\tkzTabLine {,+,d,-,z,+,} 当函数在某个值处未定义时,我不会使用表最后一行中的选项 d,而是使用\tkzTabLine {,+,${\tiny DNE}$,-,z,+,}DNE,其中 DNE 代表它不存在。

但是,我希望有一个新的选项,比如说uu选项执行任何操作z(包括垂直的点线),但$0$我希望有一个带有${\tiny DNE}$内部的框,而不是一个。然后我只需要\tkzTabLine {,+,u,-,z,+,}在最后一行使用。

你能帮我一下吗?


更新:这个答案它显示了如何使用 来修改$0$选项定义中的。z\xpatchcmd

在包的代码中tkz-tab看这里z)在第432行可以找到option的定义。

我尝试u通过复制并修改定义来插入以下新选项的定义z。但是,它无法编译。它提到缺少括号 }。

作为参考,这里是该选项的定义z

\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{z}}{%
     \draw[line width = \cmdTAB@tbs@lw,t style]%
          (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
          (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
          \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$0$};

u这是我想要实现的选项,但迄今为止还没有成功:

\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{u}}{%
     \draw[line width = \cmdTAB@tbs@lw,t style]%
          (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
          (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
          \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$DNE$};

更新2:感谢@gernot,我得到了我想要的: 在此处输入图片描述 通过代码:

\documentclass{article}
\usepackage{lmodern}
\usepackage{tcolorbox}
\usepackage{amsmath}% for \dfrac
\usepackage{tkz-tab}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\tkzTabLine{%
  \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
  (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
  \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
}{%
  \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{u}}{%
     \draw[line width = \cmdTAB@tbs@lw,double style,double distance=3pt]%
       (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
       (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
     \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){
     \begin{tcolorbox}                      
     [width=0.85cm,boxsep=0pt,left=2pt,right=2pt,top=2pt,bottom=2pt]
     \scriptsize DNE
     \end{tcolorbox}};
  }{%
    \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
    (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
    \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
  }%
}{}{}
\makeatother

\begin{document}
\begin{tikzpicture}
\tkzTabInit[lgt=2,espcl=1.6]
{/1, $5x-1$ /.8, $x+3$ /.8, $\dfrac{5x-1}{x+3}$ /1.2} % first column
{$-\infty$,$-3$,$\dfrac{1}{5}$,$\infty$} % first row
\tkzTabLine { ,-,t,-,z,+, } % second row
\tkzTabLine {,-,z,+,t,+,} % third row
\tkzTabLine {,+,u,-,z,+,} % last row
\end{tikzpicture}
\end{document}

答案1

您尝试修改的代码是一系列嵌套的 if-then-else 语句。要添加另一个选项,您不仅要插入另一个 if-then,还要插入另一个最后的右括号。

\ifthenelse{cond 1}{%
  % then 1
}{% else 1
  \ifthenelse{cond 2}{%
    % then 2
  }{% else 2
    ...
        }{% else n-1
          \ifthenelse{cond n}{%
            % then n
          }{% else n
            ...
}}...}}% number of closing parentheses = number of else branches = number of \ifthenelses

\tkzTabLine命令中,我们用另一个 if-then-else 替换最后一个 else 分支,其中旧的 else 分支成为新的 else 分支。

\usepackage{tkz-tab}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\tkzTabLine{%
  \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
  (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
  \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
}{%
  \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{u}}{%
     \draw[line width = \cmdTAB@tbs@lw,t style]%
       (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
       (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
     \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){\footnotesize$DNE$};
  }{%
    \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
    (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
    \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
  }%
}{}{}
\makeatother

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% for \dfrac
\usepackage{tkz-tab}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\tkzTabLine{%
  \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
  (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
  \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
}{%
  \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{u}}{%
     \draw[line width = \cmdTAB@tbs@lw,t style]%
       (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
       (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
     \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){\footnotesize$DNE$};
  }{%
    \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
    (N\thetkz@cnt@impair\thetkz@cnt@lgnext); 
    \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
  }%
}{}{}
\makeatother

\begin{document}
\begin{tikzpicture}
\tkzTabInit[lgt=3,espcl=2]
{/1.2, $5x-1$ /.8, $x+3$ /.8, $\dfrac{5x-1}{x+3}$ /1.2} % first column
{$-\infty$,$-3$,$\dfrac{1}{5}$,$\infty$} % first row
\tkzTabLine { ,-,t,-,z,+, } % second row
\tkzTabLine {,-,z,+,t,+,} % third row
\tkzTabLine {,+,u,-,z,+,} % last row
\end{tikzpicture}
\end{document}

相关内容