我有一堆文档,名为wk01.tex
wk02.tex
等等,最多(最终)有 20 个。这些是 I TA 课程的每周讲义。目前,每个文档都以\def\classweek{5}
或其他名称开头。然后我在文档标题中使用它。现在我真正想做的是让 latex 获取文档名称,执行一些 sed-fu 以删除数字(如果适用,则不删除其初始 0),然后在 的定义中\classweek
自动使用此数字。我发现\jobname
一次或两次引用,但我不确定如何使用它。
我想要做的事可以实现吗?
[是否有适合此类问题的标签?我想不出任何标签……]
答案1
我会努力只使用一个设置宏来简化作者界面。在这种情况下
\myheader
这是一个最小的,
\documentclass{article}
\begin{document}
\def\fname#1#2#3#4{%
\ifnum#3>0\gdef\classweek{#3#4}%
\else
\gdef\classweek{#4}%
\fi
}
\def\myheader{\expandafter\fname\jobname\classweek}
%use this to typeset the header
\myheader
\end{document}
答案2
以下取决于文件名为 wkxx.tex,其中每个 x 都是一个数字:
\def\getdigits#1#2#3#4{%
\def\first{#3}%
\def\second{#4}%
}
\expandafter\getdigits\jobname
\ifnum\first = 0\relax
\edef\classweek{\second}%
\else
\edef\classweek{\first\second}%
\fi
答案3
不需要知道文件名称的版本,只要它是以下形式
<characters><two-digit number>.tex
因此,职位名称(例如wk02.tex
或 )week35.tex
将分别给出2
和35
:
\usepackage{xparse}
\ExplSyntaxOn
\cs_new:Npx \classweek
{
\int_eval:n { \tl_item:Nn \c_job_name_tl { -2 } \tl_item:Nn \c_job_name_tl { -1 } }
}
\ExplSyntaxOff
换句话说,宏\classweek
将被定义为由文件名的最后两个字符组成的数字。
自 2015 年 9 月起,标记列表常量\c_job_name_tl
已被删除,并被转换为字符串;因此代码应变为
\usepackage{xparse}
\ExplSyntaxOn
\cs_new:Npx \classweek
{
\int_eval:n { \str_item:Nn \c_sys_jobname_str { -2 } \str_item:Nn \c_sys_jobname_str { -1 } }
}
\ExplSyntaxOff
答案4
这几乎就是我做课堂笔记时所做的。我的代码包含在我的答案针对这个问题通过 makefile 更改 LaTeX 标头并解释为我的答案到如何在 Beamer 中使用完全相同的文件进行讲义和演示模式。
(我在这里回答的主要目的是将这些问题联系在一起,因为它们足够相似,对其中一个感兴趣的人会发现其他问题的答案也与之相关。在这个特定情况下,已经给出的答案已经足够了,但其他人看这个问题可能没有完全相同的设置,但仍然能够通过查看这些问题来弄清楚该怎么做。)