大家好,我甚至不知道如何使用 latex 读取单词中的特定字母。假设我们有一个单词“MARCH”,我想读取从左边开始的第二个字母,所以答案是 A。那么有没有什么软件包可以做到这一点?您的评论非常宝贵。
答案1
只需将 RobtAll 的评论转化为快速答案,即可表明这xstring
确实很简单。这是一个非常通用的软件包 - 有时间可以查看一下。
\documentclass{article}
\usepackage{xstring}
% we can save a substring in a macro ...
\StrMid{MARCH}{2}{4}[\marchtwofour]
\begin{document}
% ... or omit the macro and just output it directly
The second letter of ``MARCH'' is \StrMid{MARCH}{2}{2}
The second to fourth letters of ``MARCH'' are \marchtwofour
\end{document}
答案2
在两种情况下都会打印“A”:负数表示“从末尾开始”。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\letter}{mm}
{% #1=position, #2=word
\tl_item:nn { #2 } { #1 }
}
\ExplSyntaxOff
\begin{document}
\letter{2}{MARCH}
\letter{-4}{MARCH}
\end{document}
这将打印四次“A”
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\letter}{smm}
{% #1=*, #2=position, #3=word
\IfBooleanTF{ #1 }
{
\tl_item:Vn #3 { #2 }
}
{
\tl_item:nn { #3 } { #2 }
}
}
\cs_generate_variant:Nn \tl_item:nn { V }
\ExplSyntaxOff
\newcommand{\word}{MARCH}
\begin{document}
\letter{2}{MARCH}
\letter{-4}{MARCH}
\letter*{2}{\word}
\letter*{-4}{\word}
\end{document}
答案3
这是一个基于 LuaLaTeX 的解决方案。它设置了一个名为 的 LaTeX 宏\pick
,该宏接受两个参数:(i) 感兴趣的字符串(可能是一个单词,但实际上可以是任何字符串)和 (ii) 要选择的字符的位置;这通常应该是 1 到 n 之间的整数,其中“n”是字符串中的字符数( 的第一个参数\pick
)。允许使用负数,在这种情况下搜索将从字符串的末尾开始并向后移动。
% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\pick[2]{\directlua{tex.sprint(string.sub("#1",#2,#2))}}
\begin{document}
\pick{March}{2} \pick{March}{5} \pick{March}{-5}
\end{document}
的第一个参数\pick
可以是宏;如果是这样,它将首先被扩展。例如,假设我们有\newcommand\March{Hello}
。然后,pick{\March}{-5}
将返回H
——从字符串“Hello”的末尾向后数的第五个字符,因为的扩展\March
是Hello
。