将两侧带有双星号的字符串转换为粗体文本

将两侧带有双星号的字符串转换为粗体文本

我正在尝试将其转换**sometext**为粗体。我遇到了以下代码片段:

\makeatletter
\def\starparse{\@ifnextchar*{\bfstarx}{\itstar}}
\def\bfstarx#1{\@ifnextchar*{\bfitstar\@gobble}{\bfstar}}
\makeatother
\def\itstar#1*{\textit{#1}\starON}
\def\bfstar#1**{\textbf{#1}\starON}
\def\bfitstar#1***{\textbf{\textit{#1}}\starON}
\def\starON{\catcode`\*=\active}
\def\starOFF{\catcode`\*=12}
\starON
\def*{\starOFF \starparse}
\starOFF

**这可以帮助我将两侧带有星号的文本转换为粗体文本。但它也会转换*sometext*为斜体。我只想检测双星号并将其转换为粗体。

我尝试删除:

\def\itstar#1*{\textit{#1}\starON}

但它给出了undefined controlled sequence error。我该怎么做呢?

答案1

稍微修改了代码以便:

\starON
*italic*

**bold**

***bold-talic***
\starOFF

印刷:

在此处输入图片描述

代码没有进行任何验证来保证输入不是类似 的内容**bold***。当代码找到 时,*它会检查是否正好还有一个*(忽略空格),如果有,它会抓取所有内容直到下一个**(s 之间不允许有空格*),因此* *bold**是有效的,但**bold* *不是。

\documentclass{article}
\makeatletter
\def\starparse{\@ifnextchar*{\bfstarx}{\starignore}}
\def\bfstarx#1{\@ifnextchar*{*\starignore}{\bfstar}}
\def\starignore{*\starON}
\makeatother
\def\bfstar#1**{\textbf{#1}\starON}
\def\starON{\catcode`\*=\active}
\def\starOFF{\catcode`\*=12}
\starON
\def*{\starOFF\starparse}
\starOFF

\begin{document}

\starON
*italic*

**bold**

***bold-talic***
\starOFF

\end{document}

相关内容