gpt4 book ai didi

latex - TeX:字符串解析和空格剥离

转载 作者:行者123 更新时间:2023-12-04 10:46:02 29 4
gpt4 key购买 nike

在 TEX 中,如何分割字符串,例如 \mana{X1 2W/UB R /G}分成几部分并将它们提供给另一个宏(在这种情况下,用类似 \m{X}\m{12}\m{W/U}\m{B}\m{R/G} 的东西替换宏调用),按照非常简单的规则分组,即:a)连续数字形成一个组,b)斜线创建一个组两个附近的字符,c) 空格将被完全剥离?

我试过 substr包,但它并没有太大帮助,只允许查找某些子字符串。手写循环,例如

\def\lcpass#1.{}
\def\lcloop#1#2.{%
\ifempty{#2}%
#1%
\let\continue=\lcpass%
\else%
\let\continue=\lcloop%
\fi%
\continue#2.}

\def\lastchar#1{\lcloop#1.} % returns the last character of a string

当字符串以空格结尾时无法工作,我也没有成功使用 \futurelet .

一般而言,如何处理 TEX 中的字符串解析任务?例如, texmate包允许一个人写这样的东西 |1 e4 e5 Nf3 Nc6|并自动绘制相应的棋位。它是如何做到的?关于循环字符串中的字符和其他像这样的 TEX 技巧,我能读到什么?

最佳答案

\def\m#1{\par$m$({\tt #1})}% Any macros
\def\removespaces{\catcode`\ =9 }% Ignore all spaces`

\let\manaNext\relax % aux def
\let\manaLastChar\relax % aux def
\newtoks\manaToks % aux toks
\newif\ifDigitProcessing

\def\mana#{\afterassignment \manaA \let\next= }% always next = {
\def\manaA{\bgroup \removespaces \let\manaNext\manaB \manaNext}% algorithm init: ignore spaces
\def\manaB{\futurelet\next\manaC}% algorithm start
\def\manaC{\ifx\next\egroup \def\nnext{\manaFlush\aftergroup\manaNext}\else\let\nnext\manaD\fi\nnext}% check for \egroup
\def\manaD{\ifx\next/\let\nnext\manaSlash\else \ifcat\next 1\let\nnext\manaDigit \else \let\nnext\manaE \fi\fi \nnext}% cases
\def\manaE#1{\manaFlush\DigitProcessingfalse\let\manaLastChar\next\manaNext}% Letters A-Z and a-z case
\def\manaFlush{\ifx\manaLastChar\relax\else\m{\manaLastChar}\fi\let\manaLastChar\relax
\ifDigitProcessing\expandafter\m\expandafter{\the\manaToks}\fi\manaToks{}}% transform to \m{...}
\def\manaSlash#1#2{\m{\manaLastChar/#2}\let\manaLastChar\relax\manaNext}%#1=/, #2=next letter
\def\manaDigit#1{\ifDigitProcessing\else\manaFlush\fi
\manaToks=\expandafter{\the\manaToks#1}\DigitProcessingtrue\manaNext}% 0-9 case

\hrule\medskip
\mana{X1 2W/UB R /G}
\medskip\hrule\medskip

\mana{X1 2W/UB s/SS 14 1 R /G XZ}
\medskip\hrule\medskip

关于latex - TeX:字符串解析和空格剥离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1113850/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com