如何使字符仅在文本模式下处于活动状态?

如何使字符仅在文本模式下处于活动状态?

我想让字符>仅在文本模式下处于活动状态(以创建 markdown 样式的块引用),而不是在数学模式下处于活动状态。我知道如何\mathcode`>="8000让字符仅在数学模式下处于活动状态,但反过来呢?我试过了,\ifmmode但似乎不起作用。

这是我现在所拥有的,必须像\>在数学模式下一样对其进行退出。

\usepackage[many]{tcolorbox}

\makeatletter

\newtcolorbox{QuoteBlock}{
    blanker,
    before skip=\topsep,
    after skip=\topsep,
    borderline west={2pt}{0pt}{black!50!white},
    breakable,
    left=\parindent,
}

\begingroup
    \catcode`\>=\active
    \catcode`\^^M=\active
    \gdef>#1^^M{%
        \begin{QuoteBlock}%
            \noindent\@ifnextchar\par\@gobble\relax#1
        \end{QuoteBlock}
    }
\endgroup
\def\>{\string>}

\AtBeginDocument{\catcode`\>=\active \catcode`\^^M=\active}

\makeatother

\begin{document}
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
    > Lorem ipsum dolor sit amet, consectetuer adipiscing elit
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
    \[x\>0\]
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
\end{document}

答案1

更改 catcode 值会改变尚未从文件中读取的字符的标记,但对任何已创建的标记没有影响。

您希望它始终处于活动状态,但在数学模式下执行它之前所做的事情,因此:

\documentclass{article}

\usepackage[many]{tcolorbox}

\makeatletter

\newtcolorbox{QuoteBlock}{
    blanker,
    before skip=\topsep,
    after skip=\topsep,
    borderline west={2pt}{0pt}{black!50!white},
    breakable,
    left=\parindent,
}

\begingroup
    \catcode`\>=\active
    \catcode`\^^M=\active
    \gdef>{\relax\ifmmode\string>\else\expandafter\quotegt\fi}%
    \gdef\quotegt#1^^M{%
        \begin{QuoteBlock}%
            \noindent\@ifnextchar\par\@gobble\relax#1
        \end{QuoteBlock}
    }
\endgroup

\AtBeginDocument{\catcode`\>=\active \catcode`\^^M=\active}

\makeatother

\begin{document}
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
    > Lorem ipsum dolor sit amet, consectetuer adipiscing elit
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
    \[x>0\]
    Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
\end{document}

相关内容