我使用一个 .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 为空。