我尝试设置一个棺材盒,它扩展了一些在其中排版的变量,但却无功而返。
编辑
背景信息:我正在尝试编写一个包,让用户可以编写会议记录或备忘录文件。公司设计规则要求,作者姓名以及其他信息(日期、组织等)应打印在一个框中,该框通常位于页面的右上方。左侧是徽标。
如果文档不用于打印,则需要用浅灰色填充徽标、作者框和右侧边距。如果打印在纸上,您有两个选择。最好使用预印纸,其中已经存在徽标和灰色框,因此文档中不能包含徽标和灰色边距框(但作者框当然必须包含!)。如果没有这种预印纸,则应将徽标、灰色边距框和作者信息框的位置稍微向内修正,这是由于(激光、喷墨等)打印机的常见限制,它们无法打印到给定纸张的边框。
预定义/预填充的棺材盒的概念似乎是我选择的工具。
我定义了一个局部变量l__author_tl
。为了说明清楚,该变量用一个起始值初始化。我还定义了一个文档命令,用于操作该变量的值。
接下来,我定义了一个棺材l__author_coffin
,用于打印变量l__author_tl
。到目前为止,效果很好,但是变量没有扩展,正如您在 MWE 中看到的那样。
\documentclass{arcticle}
\usepackage{expl3}
\ExplSyntaxOn
%% Defining the internal, local author variable
\tl_new:N \l__author_tl
\tl_set:Nn \l__author_tl {first\ value}
%% How to manipulate the variable
\NewDocumentCommand{\myauthor} {m}
{
\tl_set:Nn \l__author_tl {#1}
}
%% Just for debugging: print out the actual value of the variable
\NewDocumentCommand {\printauthor} {}
{
\l__author_tl
}
%% Create a new coffin box and define its content.
\coffin_new:N \l__author_coffin
\hcoffin_set:Nn \l__author_coffin
{
\sffamily\footnotesize
\tl_use:N \l__author_tl\
\today
}
%% This command will print out the coffin box
\NewDocumentCommand {\mybox} {}
{
\fbox{%
\coffin_typeset:Nnnnn \l__author_coffin {l}{t}{0pt}{0pt}%
}
}
\ExplSyntaxOff
\begin{document}
%% Print the box, as is
\mybox
%% Redefine the authors name
\myauthor{new value}
%% Just to be sure, the value of \l__author_tl was changed.
\printauthor
%% Print the box again
\mybox
\end{document}
从下面的输出可以看出,棺材可以工作,但它不会扩展变量内容。
(我将变量定义为局部内部变量。我也尝试了全局变量。结果相同!)
我是 LaTeX3 的新手,很难理解什么时候会扩展。我也尝试添加\tl_use:N \l__author_tl
棺材,但结果还是一样,没有扩展。
任何帮助将不胜感激。
答案1
做的时候需要先设置棺材\myauthor
,因为一旦设置了棺材,里面的内容就是固定的,因为已经排版过了。
%% This command will print out the coffin box
\NewDocumentCommand {\mybox} {}
{
\hcoffin_set:Nn \l__author_coffin
{
\sffamily\footnotesize
\tl_use:N \l__author_tl\
\today
}
\fbox{%
\coffin_typeset:Nnnnn \l__author_coffin {l}{t}{0pt}{0pt}%
}
}