如何从 \jobname 中提取多个信息

如何从 \jobname 中提取多个信息

我使用一个 .tex 文件根据 创建多个简历\jobname。为此,我使用ifthen包,对于每种类型的简历,我创建一个布尔值,用于有条件地包含一些文本。现在我想让我的 tex 文件支持多种语言(法语和英语),因此将\jobname包含两个信息:工作本身和语言名称。为此,我想使用正则表达式。但我无法在 中执行正则表达式\jobname?所以你能帮我将正则表达式应用于工作名称吗,比如<jobname>-<lang 目前我有这个代码

\usepackage{ifthen}
\usepackage[main=french,english]{babel}
----
\ifthenelse{\equal{\detokenize{ingmod}}{\jobname}}{\DEVtrue}{}
----

我使用\DEVtrue(和另一个布尔值进行条件编译,现在我想使用条件编译定义传递给 babel 的参数。与lang的部分\jobname。当然,我使用来Makefile包装latexmk每个编译的命令。

答案1

如果我理解你的问题,你有一个主文件名foo-bar.tex,你需要检查作业名称的第一部分是否是foo。你可以通过以下宏来做到这一点:

\def\readjobname #1-#2\end{\def\name{#1}\def\lang{#2}}
\def\isname #1\iftrue{\edef\tmp{\detokenize{#1}}\ifx\tmp\name}

\expandafter\readjobname \jobname\end  % reading both parts of the job name

\isname ingmod\iftrue Name is ingmod\else Name isn't ingmod\fi

\isname foo\iftrue Name is foo\else Name isn't foo\fi

\bye

上面的示例假设作业名称必须采用 的形式foo-bar。如果这里缺少连字符-,则失败。但您可以使宏更强大:

\def\readjobname #1-#2\end{\def\name{#1}\def\lang{#2}}
\def\isname #1\iftrue{\edef\tmp{\detokenize{#1}}\ifx\tmp\name}
\def\isindash #1-#2\iffalse{\ifx\relax#2\relax}

\expandafter\isindash \jobname-\iffalse  % reading job name
   \edef\name{\jobname}\def\lang{}
\else
   \expandafter\readjobname \jobname\end
\fi

\isname ingmod\iftrue Name is ingmod\else Name isn't ingmod\fi

\isname foo\iftrue Name is foo\else Name isn't foo\fi

\bye

现在,如果没有连字符,则名称为完整的职位名称,并且 \lang 为空。

相关内容