使用文档中的文件名?

使用文档中的文件名?

我有一堆文档,名为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将分别给出235

\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 中使用完全相同的文件进行讲义和演示模式

(我在这里回答的主要目的是将这些问题联系在一起,因为它们足够相似,对其中一个感兴趣的人会发现其他问题的答案也与之相关。在这个特定情况下,已经给出的答案已经足够了,但其他人看这个问题可能没有完全相同的设置,但仍然能够通过查看这些问题来弄清楚该怎么做。)

相关内容