我想让字符>
仅在文本模式下处于活动状态(以创建 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}