!Lettrine 中未定义的控制序列

!Lettrine 中未定义的控制序列

我正在使用以下代码通过 lettrine 删除 cap:

\usepackage{ebgaramond}
\usepackage{titlesec}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage[portuguese]{babel}

% Compile with XeLaTeX or LuaLaTeX

% Drop Cap
\usepackage{lettrine}
\usepackage{type1cm}
\usepackage{xstring}

\makeatletter
\let\ltx@@chapter\@chapter
\def\@chapter[#1]#2 #3 {\ltx@@chapter[#1]{#2}
    \lettrine[lines=2, findent=1pt, nindent=1pt, slope=4pt]{\StrLeft{#3}{1}}{\@gobble#3}\ }
\renewcommand{\LettrineTextFont}{\textnormal} 
\makeatother

\begin{document}
\chapter[Testes para uma ou duas Populações]{Testes para uma \\ou duas Populações}\label{ch:testdpop}
This is an example. \lipsum[1].
\end{document}

但我遇到了这个错误:

! Undefined control sequence.
\xs_StrLeft__ ..._expand \xs_arg_ii }}{}}\xs_call 
                                                  
l.24 This is an example. \lipsum[1].

我确实得到了预期的结果,但我对错误感到困惑...有什么想法吗?提前致谢!

答案1

命令xstring不可展开。您应该先获取第一个字母,然后再将其传递给\lettrine

\documentclass{book}
\usepackage{ebgaramond}
\usepackage{titlesec}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage[portuguese]{babel}

% Compile with XeLaTeX or LuaLaTeX

% Drop Cap
\usepackage{lettrine}
%\usepackage{type1cm}% Why? 
\usepackage{xstring}

\makeatletter
\let\ltx@@chapter\@chapter
\def\@chapter[#1]#2 #3 {%
  \ltx@@chapter[#1]{#2}
  \StrLeft{#3}{1}[\jpmd@temp]%
  \lettrine[lines=2, findent=1pt, nindent=1pt, slope=4pt]{\jpmd@temp}{\@gobble#3}\ }
\renewcommand{\LettrineTextFont}{\textnormal} 
\makeatother

\begin{document}
\chapter[Testes para uma ou duas Populações]{Testes para uma \\ou duas Populações}\label{ch:testdpop}
This is an example. \lipsum[1].
\end{document}

另一方面,这很容易出错,明确使用\lettrine会更好。

\documentclass[a4paper]{book}
\usepackage[portuguese]{babel}
\usepackage{ebgaramond}
\usepackage{titlesec}
\usepackage{xcolor}
\usepackage{lipsum}

% Compile with XeLaTeX or LuaLaTeX

% Drop Cap
\usepackage{lettrine}

\newcommand{\start}[1]{\lettrine[lines=2, findent=1pt, nindent=1pt, slope=4pt]{#1}{}}


\begin{document}

\chapter[Testes para uma ou duas Populações]
        {Testes para uma \\ou duas Populações}\label{ch:testdpop}

\start{T}his is an example. \lipsum[1].

\end{document}

在此处输入图片描述

笔记。你永远不应该加载type1cm,因为它已经过时了。在完全没有意义的场合更不应该加载,比如 (Xe|Lua)LaTeX。

相关内容