为每种字母/尺寸的 Lettrine 选项编写一个测试器

为每种字母/尺寸的 Lettrine 选项编写一个测试器

我正在编写一个测试宏来评估不同字母和不同大小(线条)的 Lettrine 参数。场景如下:

  1. 主程序调用一个参数宏来测试给定字母的 Lettrine:\TestLettrine{A}
  2. \TestLettrine宏调用另一个宏来获取正确的选项,并将字母和大小(行号)传递给 Lettrine \LettrineOpts{A}{3}:。

当我编译它时(我正在使用 LuaLatex)我收到消息:

! Argument of \xs_IfStringCase_ii has an extra }.
<inserted text>
                \par
l.179 \TestLettrine{A}

在 Overleaf 上运行它时出现了更多错误,包括此处提到的错误。

这是我的 MWE:

\documentclass{article}
\usepackage{lettrine}
\usepackage{xstring}
\usepackage{lipsum}

\newcommand{\LettrineOpts}[2]{%
  \IfStrEqCase{#1}{%
    {A}{lines=#2,lraise=0.1,slope=0.6em}%
    {C}{lines=#2,findent=0.1em,nindent=0.18em,slope=-0.5em}
  }%
}%

\newcommand{\TestLettrine}[1]{%
  \providecommand{\opts}{\LettrineOpts{#1}{3}}
  Opts for char #1 and size 3:\\ \opts 
  \lettrine[\opts]{#1}{}3 lines (\opts). One liner.
  \let\opts\relax
  \vspace*{3ex}

  \providecommand{\opts}{\LettrineOpts{#1}{4}}
  Opts for char #1 and size 4:\\ \opts 
  \lettrine[\opts]{#1}{}4 lignes. \\ \lipsum
  \let\opts\relax
  \vspace*{3ex}
}%

\begin{document}

\TestLettrine{A} \par
\TestLettrine{C}
% covering all the letters

\end{document}

答案1

您的代码产生了另一个错误,并且不允许我播放尺寸变化(lines=n)。

与此同时,我找到了另一个我将要采用的解决方案。它使用 Lettrine 配置文件,我可以在其中定义我想要的每个字符的选项。我最初认为定义大小会覆盖这些定义。事实并非如此。Lettrine 将我的选项与配置文件中已有的选项合并。

丹尼尔·弗利波 (Daniel Flipo) 的出色作品!

如果这个解决方案可能对某人有帮助,这里是最终代码的片段。

配置文件(options.cfl):

\LettrineOptionsFor{A}{slope=0.1\LettrineWidth, findent=-.5em, nindent=.7em}
\LettrineOptionsFor{À}{slope=0.1\LettrineWidth, findent=-.5em, nindent=0.7em}
\LettrineOptionsFor{V}{slope=-0.1\LettrineWidth, lhang=0.5, nindent=0pt}
\LettrineOptionsFor{C'}{nindent=-0.5em}
\LettrineOptionsFor{Q}{loversize=-0.1, lraise=0.1}

宏及其调用:

\newcommand{\blah}{\lipsum*[1-2][1-5]}

\newcommand{\TestLettrine}[1]{%
  \lettrine[lines=3]{#1}{} lines: 3 \\ \blah
  \vspace*{3ex}
  \lettrine[lines=4]{#1}{} lines: 4 \\ \blah
  \clearpage
}%

\newcommand{\TestAllLettrines}{%
  \foreach \char in {A, À, C', Q, V }{%
    \TestLettrine{\char} \par%
  }%
}%

\TestAllLettrines

给出了示例的选项。

相关内容