不使用 lua 来替换流中的文本序列?

不使用 lua 来替换流中的文本序列?

我一直在使用 vitek novotny 提供的出色的 markdown 包,但有时它有点过度,而且 lualatex 也比 pdflatex 慢。然而,即使在我的简单 latex 文档中,我确实也错过了 markdown 的一个功能,特别是在早期创作阶段,我仍在尝试拼凑我的逻辑流程:

我希望将两个正则表达式字符串\n\*\s\n\s+\-\s替换为我可以指定的字符串(\noindent\rule{0pt}{20pt}$bullet$\hspace{4em}\rule{0pt}{16pt}$\>$)。我不会以这种方式开始正常的段落,因此这很少会让我绊倒;如果真的绊倒了,它会立即显示出来,我可以避开它,或者当我用文本替换要点时它会消失。

在正常的乳胶字节流中进行这种即时替换也意味着我不需要\begin{markdown}\n\* ...\end{markdown}为这个简单的任务编写代码。(shell 脚本也不可接受,因为我使用 overleaf。)

有没有一种快速而简单的方法来实现这一点?

答案1

这个修改后的答案回应了 OP 的评论,表明我的原始答案误解了这个问题(因为它得到了几个赞成票,所以我把它包含在答案的后面)。

由于 TeX 吸收行尾和后续前导空格的方式,如果不尝试其他魔法(可能使用\obeyspacesand/or \endlinechar),我将无法检测行上的前导空格。因此,我剩下的就是检测首字母*-后面的 a \par(无论是否有前导空格)。

我可以使用 将它们转换为项目符号和缩进级别tokcycle。仅调用\tokencyclexpress\par即可开始拦截/替换并\endtokencyclexpress终止拦截/替换。

\documentclass{article}
\usepackage{tokcycle}
\newif\ifstardashcheck
\Characterdirective{%
  \tctestifcon{\ifstardashcheck}
    {\tctestifx{*#1}%
      {\addcytoks{\noindent$\bullet$}}%
      {\tctestifx{-#1}
          {\addcytoks{\noindent\hspace{20pt}$>$}}%
          {\addcytoks{#1}}%
      }%
    }%
    {\addcytoks{#1}}%
  \stardashcheckfalse
}
\Macrodirective{\tctestifx{\par#1}{\stardashchecktrue
  \addcytoks{#1}}{\stardashcheckfalse\addcytoks{#1}}}
\begin{document}
\tokencyclexpress\par%
* bullet test 1

 * bullet test 2

- indent test 1

 - indent test 2

* Bullet test 3

Normal text
\endtokencyclexpress
\end{document}

在此处输入图片描述

原始答案(误解原帖者的意图)

\documentclass{article}
\usepackage[T1]{fontenc}
\let\s\relax
\def\compA{\*}
\def\compB{+\-\s}
\def\n#1\s{%
 \def\tmp{#1}%
 \ifx\compA\tmp
  \def\next{\noindent\rule{0pt}{20pt}$\bullet$ }%
 \else
   \ifx\relax#1\relax
     \def\next{\nn}%
   \else
     \def\next{[\detokenize{\n#1\s}] }%
   \fi
 \fi
 \next
}
\def\nn#1#2#3{\def\tmp{#1#2#3}%
 \ifx\compB\tmp
   \def\next{\hspace{4em}\rule{0pt}{16pt}$>$ }%
 \else
   \def\next{[\detokenize{\n\s#1#2#3}] }%
 \fi
 \next
}
\begin{document}
Testing

\n\*\s First type.

\n\s+\-\s 2nd type.

Improperly formed 

\n123\s and 

\n\s+-=.
\end{document}

在此处输入图片描述

答案2

shell 脚本也不可接受,因为我使用 overleaf。)

这似乎是一个挑战,所以这里是在 overleaf 上运行的 perl 中实现的行首的 * -> 项目符号替换

在此处输入图片描述

该项目只有两个文件

tex 源代码*位于行首

\documentclass{article}

\begin{document}

* xxx
* zzz
\end{document}

以及latexmkrc在 tex 运行之前指定正则表达式替换的文件(\写为以避免计算出在各个阶段需要引用^^5c多少个。\\\\\

$pdflatex="perl -pi -e  's/^ *[*]/^^5cpar^^5ctextbullet~/' %S; pdflatex %S"

相关内容