根据传递给编译器的参数动态生成输出

根据传递给编译器的参数动态生成输出

假设我有一份这样的文件。

\documentclass{article}
\begin{document}
\section{one}
\begin{enumerate}
\item This is the first item.
\item This is the second item.
\item This is the third item.

\end{enumerate}
\section{two}
bla bla blabla
\end{document}

是否可以根据编译期间传递的参数强制枚举标签中的项目顺序和部分顺序。

我的简历需要这个,有时我需要强调(在顶部列出)我的物理技能,有时需要强调我的电子技能(取决于上下文)。我可以保留两份不同的简历,但那太麻烦了。我想知道是否存在这样的事情。

答案1

一种方法是在序言中定义“特殊”部分,然后使用变量/宏来指定它们插入文档的顺序。下面我将展示一种方法。我曾使用latex3提供一个稍微时髦的界面来控制打印的变体:

\documentclass{article}

\newcommand\mylist{
\section{one}
\begin{enumerate}
\item This is the first item.
\item This is the second item.
\item This is the third item.
\end{enumerate}
}

\newcommand\blah{
\section{two}
bla bla blabla
}

\usepackage{expl3}

% set a default
\providecommand\cvversion{listblah}
\ExplSyntaxOn
\newcommand\mycv{
  \str_case:xn {\cvversion} {
    {listblah} { \mylist \blah}
    {blahlist} { \blah \mylist }
  }
}
\cs_generate_variant:Nn \str_case:nn {xn}
\ExplSyntaxOff

\begin{document}

  \mycv

\end{document}

因此\mylist\blah是您想要在不同位置打印的内容的两位,并且\mycv宏用于根据的值将它们打印到所需的顺序\cvversion。默认情况下,\mylist在之前打印,\blah但是如果您设置\cvversion toblahlist`,您将以相反的顺序获得它们。

您可以\cvversion使用以下命令从命令行进行设置

pdflatex "\def\cvverson{blahlist}\input{filename}"

其中filename被替换为文件的名称。我会通过创建多个版本的简历来做到这一点,如下所示

% blahlist version
\newcommand\cvversion{blashlist}
\input filename

或者使用符号链接,然后用来\jobbname设置\cvversion accordingly (in which case you would not need the macro\cvversion`....)。

最后,请注意,上面的宏不进行任何错误检查。这在您的用例中可能没问题,但添加它仍然可能更安全。更严重的是,您可能需要微调 中不同文档元素周围的间距\mycv,但如果不知道这些宏里面有什么,就很难猜出该怎么做。

相关内容