从命令扩展中删除前导空格

从命令扩展中删除前导空格

我正在使用一个将标记转换为 LaTeX 文档的程序;输出的自定义仅限于定义要插入序言中的命令。某个标记结构被转换为 LaTeX,形式如下:

\newcommand{\foo}{
Here Be Text
}

(请注意,“Here Be Text”之前的换行符是由转换器无条件插入的,即使标记中没有相应的换行符。)

我想\foo在自定义序言中使用 来定义一个花哨的标题(\lhead{\textsc{\foo}})。问题是,由于 之后有换行符\newcommand{\foo}{,呈现的文档在标题中的“Here Be Text”之前插入了一个空格,因此标题文本与其下方的 hrule 不齐平。如果在%的末尾手动插入\newcommand{\foo}{,多余的空格就会消失,但我不想这样做。

我的问题是:我可以插入什么\lhead{\textsc{\foo}}来使其扩展为\lhead{\textsc{Here Be Text}}而不是\lhead{\textsc{ Here Be Text}}

我正在处理的最小工作示例:

\documentclass{article}

\newcommand{\foo}{
Here Be Text
}

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\textsc{\foo}}
\chead{}
\rhead{\thepage}
\cfoot{}

\begin{document}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.  Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
\end{document}

我不知道该如何解决这个问题;我最好的想法是:

\lhead{\expandafter\textsc{%
\foo}}

但这并没有什么区别。

答案1

使用

\lhead{\textsc{\ignorespaces\foo}}

反而

\lhead{\textsc{\foo}}

\ignorespaces是 TeX 原语在最低处理器级别上工作,在这种情况下这不是问题。

编辑:另一种可能性是暂时禁用在行尾留空格,并在这样的环境中进行定义:

\endlinechar=-1
   \newcommand \foo {
   Here Be Text
   }
\endlinechar=`\^^M

答案2

有很多选择。以下是两个:

花哨的

% Define \TrimSpacesApply
\ExplSyntaxOn
\cs_generate_variant:Nn \tl_trim_spaces_apply:nN { V }
\cs_new_eq:NN \TrimSpacesApply \tl_trim_spaces_apply:VN
\ExplSyntaxOff

% Use it
\lhead{\TrimSpacesApply\foo\textsc}

\TrimSpacesApply是 的副本\tl_trim_spaces_apply:VN\tl_trim_spaces_apply:VN它将修剪第一个参数 ( ) 的空格\foo并将其作为参数传递给第二个参数 ( \scshape)。

肮脏的那个:

\lhead{\expandafter\textsc\expandafter{\romannumeral-`f\foo}}

s\expandafter将扩展\romannumeral,并将\romannumeral扩展标记以查找整数后跟可选空格。 \romannumeral-`f视为数字-102(您可以使用任何您喜欢的字母代替f),并将扩展\foo并占用前导空格。 的扩展\romannumeral-102将为零,因为数字为负数。

使用该符号-`f,而不仅仅是以数字开头:-102扩展为无,而扩展为(在您的情况下是正确的)。\foo\romannumeral-1025\romannumeral-`f55

答案3

\newcommand{\trim}[1]{\expandafter\xtrim#1}
\newcommand{\xtrim}[1]{#1}

让你写

\lhead{\textsc{\trim\foo}}

\foo注意:如果为空,则易碎。

相关内容