与旋转门包装相匹配的怀疑结果符号

与旋转门包装相匹配的怀疑结果符号

这或许可以看作是怀疑后果的象征我从中得到了答案,所以我可以写下是一个值得怀疑的结果A例如

B 是 A 的怀疑结果

哪个Peter Grill 的代码生成。现在假设我使用turnstile包来排版代表逻辑结果的turnstiles,我更喜欢turnstile包的turnstiles而不是\vdash\vDash,并且我想在同一篇文章中谈论逻辑和怀疑的结果。然后我面临两个问题:

  1. 旋转门包中的旋转门与以下答案中的任何表示怀疑结果的符号都不匹配怀疑后果的象征因为旋转闸包的闸机比较大。

  2. 旋转闸门包的旋转闸门在旋转闸门下方的符号放置方式方面更为优越。

以下符号表示是一个值得怀疑的结果A在语言上大号然后是合乎逻辑的结果A在语言上大号

B 是 A 的逻辑和怀疑结果

理想情况下,我希望对旋转闸门包进行扩展以处理怀疑结果,这样我就可以生产出具有波浪水平的旋转闸门,与(普通)旋转闸门相匹配,无论是外观还是在旋转闸门包的下方和上方正确放置符号的能力。此外,与图像显示的不同,我希望波浪线具有与垂直线相同的厚度和边缘。

答案1

turnstile包裹提供

\turnstile[<size>]{<lvert>}{<horz>}{<below>}{<above>}{<rvert>}

<horz>调用宏的地方

\makehor{<line type>}{<thickness>}{<length>}{<sep>}

绘制旋转门的水平线。在下面的代码中,我重新定义了\makehor(因此也重新定义了\turnstile),以采用第一个参数w(对于wavy),将符号排版$\sim$为“水平线”。adjustbox包裹提供一些剪辑和调整大小的功能。

在此处输入图片描述

\documentclass{article}
\usepackage{turnstile}% http://ctan.org/pkg/turnstile
\usepackage{adjustbox}% http://ctan.org/pkg/adjustbox

\renewcommand{\makehor}[4]
  {\ifthenelse{\equal{#1}{n}}{\hspace{#3}}{}
   \ifthenelse{\equal{#1}{s}}{\rule[-0.5#2]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{d}}{\setlength{\lengthvar}{#2}
     \addtolength{\lengthvar}{0.5#4}
     \rule[-\lengthvar]{#3}{#2}
     \hspace{-#3}
     \rule[0.5#4]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{t}}{\setlength{\lengthvar}{1.5#2}
     \addtolength{\lengthvar}{#4}
     \rule[-\lengthvar]{#3}{#2}
     \hspace{-#3}
     \rule[-0.5#2]{#3}{#2}
     \hspace{-#3}
     \setlength{\lengthvar}{0.5#2}
     \addtolength{\lengthvar}{#4}
     \rule[\lengthvar]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{w}}{% New wavy $\sim$ definition
     \setbox0=\hbox{$\sim$}%
     \raisebox{-.6ex}{\hspace*{-.05ex}\adjustbox{width=#3,height=\height}{\clipbox{0.75 0 0 0}{\usebox0}}}}{}
  }

\begin{document}

\[
  \renewcommand{\arraystretch}{2}%
  \begin{array}{ll}
    \textrm{Regular}\ \verb!s! & \textrm{Wavy}\ \verb!w! \\ \hline
    A\turnstile{s}{s}{}{}{n}B & A\turnstile{s}{w}{}{}{n}B \\
    A\turnstile{s}{s}{L}{}{n}B & A\turnstile{s}{w}{L}{}{n}B \\
    A\turnstile{s}{s}{}{D}{n}B & A\turnstile{s}{w}{}{D}{n}B \\
    A\turnstile{s}{s}{L}{D}{n}B & A\turnstile{s}{w}{L}{D}{n}B
  \end{array}
\]
\end{document}

利用现有命令(或扩展现有命令)而不是编写自己的命令的主要优势在于它更易于使用。此外,由于\turnstile将大写/小写字母作为参数,因此更容易掌握它们,而不是(比如说)定义需要对限制使用进行某种解释的新命令,例如\wavyturn_{L}^{D}(比如说)。因此,\turnstile采用了 的其他功能(例如\rule垂直线和其他间距)。

上述代码目前仅适用于单条波浪线。但是,如果需要,可以将其扩展为适用于多条波浪线(如原始\turnstile..{d}...\turnstile..{t}..命令)。目前,它基于 MWE 工作,但无法按预期与其他变体(较长的短语和/或右垂直线)一起工作。这可能需要更多工作,因为我还没有测试过。


编辑:诚然我的tikzturnstile- 实力需要类固醇的大力推动。符号为水平规则提供了以下附加功能z。它thin使用正弦曲线绘制波浪线。我很确定可以在 内进行水平 ( \hspace) 和垂直 ( ) 调整,因此欢迎并鼓励提出建议。修改也是如此,以及是否也可以将其纳入:\raisebox\tikzadjustbox\tikz

在此处输入图片描述

\documentclass{article}
\usepackage{turnstile}% http://ctan.org/pkg/turnstile
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usepackage{adjustbox}% http://ctan.org/pkg/adjustbox

\renewcommand{\makehor}[4]
  {\ifthenelse{\equal{#1}{n}}{\hspace{#3}}{}
   \ifthenelse{\equal{#1}{s}}{\rule[-0.5#2]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{d}}{\setlength{\lengthvar}{#2}
     \addtolength{\lengthvar}{0.5#4}
     \rule[-\lengthvar]{#3}{#2}
     \hspace{-#3}
     \rule[0.5#4]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{t}}{\setlength{\lengthvar}{1.5#2}
     \addtolength{\lengthvar}{#4}
     \rule[-\lengthvar]{#3}{#2}
     \hspace{-#3}
     \rule[-0.5#2]{#3}{#2}
     \hspace{-#3}
     \setlength{\lengthvar}{0.5#2}
     \addtolength{\lengthvar}{#4}
     \rule[\lengthvar]{#3}{#2}}{}
   \ifthenelse{\equal{#1}{w}}{% New wavy $\sim$ definition
     \setbox0=\hbox{$\sim$}%
     \raisebox{-.6ex}{\hspace*{-.05ex}\adjustbox{width=#3,height=\height}{\clipbox{0.75 0 0 0}{\usebox0}}}}{}
   \ifthenelse{\equal{#1}{z}}{% New tikz wavy definition
     \raisebox{-.4ex}{\hspace*{-.08ex}\tikz \draw [thin,x=0.5ex,y=.25ex] (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0);\hspace*{.2ex}}}{}   
  }

\begin{document}

\[
  \renewcommand{\arraystretch}{2}%
  \begin{array}{lll}
    \textrm{Regular}\ \verb!s! & \textrm{Wavy}\ \verb!w! & \textrm{TikZ}\ \verb!z! \\ \hline
    A\turnstile{s}{s}{}{}{n}B & A\turnstile{s}{w}{}{}{n}B & A\turnstile{s}{z}{}{}{n}B \\
    A\turnstile{s}{s}{L}{}{n}B & A\turnstile{s}{w}{L}{}{n}B & A\turnstile{s}{z}{L}{}{n}B \\
    A\turnstile{s}{s}{}{D}{n}B & A\turnstile{s}{w}{}{D}{n}B & A\turnstile{s}{z}{}{D}{n}B \\
    A\turnstile{s}{s}{L}{D}{n}B & A\turnstile{s}{w}{L}{D}{n}B & A\turnstile{s}{z}{L}{D}{n}B
  \end{array}
\]
\end{document}

它需要改进,原因如下:

  1. “仅分母”和“分子+分母”的排版有非常细微的差别\turnstile。例如,看一下

    在此处输入图片描述

  2. 添加结束垂直线可能会产生意外结果。

  3. 右操作数的间距(B在本例中)太远。这可以通过中间宏来解决,但最好在宏内部解决\turnstile

我认为以上所有问题都应该由更擅长处理tikz相关命令的人来解决。不过话又说回来,这也许不是问题。

答案2

如果您希望符号根据周围文本的大小进行调整,则解决方案来自怀疑后果的象征可以增强以接受大写和小写字符的两个附加参数。

更新:根据评论中的要求,我还添加了一个可选的第一个参数(默认值\sim),它定义要使用的水平字符。以下是带有三个不同水平符号的输出:

在此处输入图片描述

\documentclass[border=2pt]{standalone}
\usepackage{amsmath}%  only needed for \dfrac
\usepackage{graphicx}% needed for \scalebox
\usepackage{pgf}%      needed for the math calculations

% http://math.arizona.edu/~aprl/publications/mathclap/
\def\mathrlap{\mathpalette\mathrlapinternal}%
\def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}}%

\makeatletter
\newdimen\@mydimen%
\newdimen\@myHeightOfBar%
\settoheight{\@myHeightOfBar}{$|$}%
\newcommand{\SetScaleFactor}[1]{%
    \settoheight{\@mydimen}{#1}%
    \pgfmathsetmacro{\scaleFactor}{\@mydimen/\@myHeightOfBar}%
}%

\newcommand*{\Scale}[2][3]{\scalebox{#1}{\ensuremath{#2}}}%

\newcommand*{\nct}[5][\sim]{%
    \SetScaleFactor{\vphantom{\ensuremath{#2#3}}}% Compute scale to be applied
    #2%
\mathrel{\Scale[\scaleFactor]{|\mathrlap{\kern-0.48ex{\substack{{\scriptscriptstyle #5}\\[-0.5ex]#1\\[-0.6ex]{\scriptscriptstyle #4}}}}\hphantom{\kern-0.90ex\sim}}}%
    #3%
}%

\begin{document}
$\nct{a}{b}{l}{u}     \qquad \nct{\frac{A}{C}}{B}{l}{u}    \qquad \nct{\dfrac{A}{C}}{B}{l}{u}$\par
$\nct[-]{a}{b}{l}{u}  \qquad \nct[-]{\frac{A}{C}}{B}{l}{u} \qquad \nct[-]{\dfrac{A}{C}}{B}{l}{u}$\par
$\nct[=]{a}{b}{l}{u}  \qquad \nct[=]{\frac{A}{C}}{B}{l}{u} \qquad \nct[=]{\dfrac{A}{C}}{B}{l}{u}$
\end{document}

相关内容