我正在用 scrlttr2 写一封信,它利用了 KOMA 脚本包。
在 .lco 文件中我有以下内容(这让我很头疼):
\setkomavar{signature}{\includegraphics[height=\useplength{signatureimageheight}]{\usekomavar{signatureimage}}\\
\usekomavar{fromname}}
我得到的错误是
! Undefined control sequence.
\filename@simple ...#2\\}\fi \edef \filename@base
{#1}
l.11 \closing{kthxbye,}
如果我\usekomavar{signatureimage}
用my-signature.pdf
一切都替换,那就好了,但我怎样才能让事情变得动态呢?
\usekomavar{signatureimage}
生产my-signature.pdf
平均能量损失(实际上:产生错误的最小示例):
信件.tex
\documentclass[a4paper]{scrlttr2}
\usepackage{graphicx}
\usepackage[dutch]{babel}
\begin{document}
\begin{letter}{Recipient\\
Address}
\LoadLetterOption{my-details}
\setkomavar{subject}{subject}
\opening{Hi,}
Lorem ipsum.
\closing{kthxbye,}
\end{letter}
\end{document}
我的详细信息.lco:
\ProvidesFile{my-details.lco}[2013/08/16 lco (My Details)]
\LoadLetterOption{letter-p1}
\setkomavar{fromname}{Me Myself}
\setkomavar{fromaddress}{My Address}
\setkomavar{signatureimage}{my-signature.pdf}
\LoadLetterOption{letter-p2}
字母-p1.lco:
\ProvidesFile{letter-p2.lco}[2013/08/16 lco (letter-p2)]
\KOMAoptions{paper=a4,foldmarks=true,foldmarks=mvp,subject=titled}
\LoadLetterOption{DINmtext}
\newkomavar{signatureimage}
\setkomavar*{signatureimage}{filename of signaure image (including extension)}
\@newplength{signatureimageheight}
\@setplength{signatureimageheight}{\useplength{sigbeforevskip}}
字母-p2.lco(这就是动态文件搞砸的地方):
\ProvidesFile{letter-p2.lco}[2013/08/16 lco (letter-p2)]
\ifkomavarempty{signatureimage}{%true-code
}
{%false-code
\setkomavar{signature}{\includegraphics[height=\useplength{signatureimageheight}]{\usekomavar{signatureimage}}\\
\usekomavar{fromname}}
\@setplength{sigbeforevskip}{0cm}
}
答案1
\usekomavar
不能直接用作文件名\includegraphics
:
- 这是不是可扩展,它是通过 定义的
\DeclareRobustCommand
。 - 文件名解析器需要看到分隔扩展名的点。
解决方法:
\usekomavar
有一个可选参数,可用于定义将扩展为文件名的临时宏。扩展通过以下方式完成\edef
:
\usekomavar[\edef\tmp]{signatureimage}%
\includegraphics[%
height=50mm,%
]{\tmp}%
\tmp
LaTeX 的文件名解析器会扩展文件名的第一个标记,因此如果扩展一次,就会看到文件扩展名。