自动信件和命令

自动信件和命令

我需要自动将字母放置在我不想直接编辑的文本上。

到目前为止,我已经使用

\def\drop #1#2 {% note the space before {
  \lettrine{#1}{#2} % a trailing space
}

\drop Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sagittis vitae massa nec gravida. Fusce quis porttitor leo. 

问题是有些段落以命令开头,例如:

\marginnote{Foo} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sagittis vitae massa nec gravida. Fusce quis porttitor leo.

在这些情况下会返回各种错误;我尝试过\expandafter但没有成功。

我怎样才能让 Latex 使用第一个“真实”的单词作为 lettrine,即忽略(最终)前面的命令?

答案1

此方法检查 后​​面的标记的 catcode \drop。如果它是一个命令(catcode 0),它会执行第一个标记 blob 直到第一个空格,然后\drop再次重新发出。因此,您不能意外地在前导宏的参数之间留下空格,例如 ,\rule{1ex} {2ex}否则空格将阻碍参数吸收。通常,这不是问题,并且不会影响采用单个参数的命令。

\documentclass{article}
\usepackage{lettrine,marginnote}
\def\drop #1#2 {% note the space before {
  \ifcat\noexpand\relax\noexpand#1\def\next{#1{#2}\drop}\else
  \def\next{\lettrine{#1}{#2} }\fi% a trailing space
  \next
}
\begin{document}
\drop Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sagittis vitae massa nec gravida. Fusce quis porttitor leo. 

The problem is that some paragraphs start with a command, e.g:

\drop \marginnote{Foo in the margin} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sagittis vitae massa nec gravida. Fusce quis porttitor leo.
\end{document}

在此处输入图片描述

相关内容