通过命令行参数的LaTeX文档(Passing command-line arguments to

2019-08-16 17:30发布

有时候,我定义新的命令,如以下。

\newcommand{\comment}[1]{\textbf{#1}}
%\necommand{\comment}[1]{\emph{#1}} 

上面的命令使我一下子改变了我的代码部分的风格。 如果我想生成两个可能的样式,我必须编译LaTeX的我的文档每次修改源代码,以使所需的样式两次。

有没有办法避免这种情况下,源代码修改? 也就是说,我可以通过乳胶一些命令行参数,这样我可以选择使用基于这样的说法哪种风格?

Answer 1:

也就是说,我可以通过乳胶一些命令行参数,这样我可以选择使用基于这样的说法哪种风格?

是。 三个选项:

在源文件中,写

\providecommand{\comment}[1]{\emph{#1}}% fallback definition

然后编译乳胶文件(“myfile.tex”)作为

pdflatex (whatever options you need) "\newcommand\comment[1]{\textbf{#1}}\input{myfile}"

或者,

pdflatex "\let\ifmyflag\iftrue\input{myfile}"

然后在源

\ifcsname ifmyflag\endcsname\else
  \expandafter\let\csname ifmyflag\expandafter\endcsname
                  \csname iffalse\endcsname
\fi
...
\ifmyflag
  \newcommand\comment[1]{\emph{#1}}
\else
  \newcommand\comment[1]{\textbf{#1}}
\fi

甚至

pdflatex "\def\myflag{}\input{myfile}"

\ifdefined\myflag
  \newcommand\comment[1]{\emph{#1}}
\else
  \newcommand\comment[1]{\textbf{#1}}
\fi

这可能是最短的,虽然略显脆弱,因为你永远不知道什么时候一个包可以定义\myflag你背后。



Answer 2:

当你需要相当灵活的一次性选择,好比说改变你的简历上的位置线,应使用威尔的方法。 如果OTOH您通过与生产上的选项相同的选择,那么你应该考虑避免命令行参数,或将其加工成构建脚本或生成文件。

我给两种技术,以避免命令行参数:

招数一:如果你制作的文档的固定阵列必须保持,比如您的两种风格的例子,那么我建议你只是内部实现另一个TEX文件,即thesis.tex威尔的乳胶代码包含\providecommand\comment[1]{\emph{#1}}和论文-ugly.tex由\newcommand\comment[1]{\textbf{#1}} \input thesis.tex

使用这种技术时,你当然必须重新运行工具,如中文提供,除非你符号链接中间文件,ALA ln -s thesis.aux thesis-ugly.auxln -s thesis.bbl thesis-ugly.bbl

招数二:我发现招1别扭改变文件papersizes,所以我写了下面的perl脚本,简称PAPERSIZE。 该命令papersize A4 teaching.tex就地修改teaching.tex和符号链接teaching.pdf教学-A4.pdf,使运行pdflatex teaching创造教学-A4.pdf,但不会干扰预先存在的教学字母。 PDF格式,并且不需要重新运行bibtex teaching 。 它显然需要与内部的引用文件,重新运行pdflatex两次。

#!/usr/bin/perl -i~ -n

BEGIN {
die "Usage: papersize letter/A4/etc. [filename]\n" if ($#ARGV < 0);
$SIZE = shift @ARGV;  @files=@ARGV;
$FLAG = "% paper size :: ";
}

if (/$FLAG(\w+)/) {
    if ($1 eq $SIZE) {
        s/^\% //;
    } else {
        s/^([^\%])/\% \1/;
    }
}
print $_;

END {
foreach (@files) {
    if (s/\.tex//) {
    $l = "$_-$SIZE.pdf";  $_ .= ".pdf";
    unlink($_) if (-l $_);
    symlink($l,$_) if (! -e $_);
} }
}

您必须将特殊注释添加% paper size :: ...当你改变纸张尺寸应改变每个文件一行。

\documentclass[letterpaper,11pt]{article}  % paper size :: letter
% \documentclass[a4paper,11pt]{article}  % paper size :: A4
\usepackage[text={6.5in,8.8in}]{geometry}  % paper size :: letter
% \usepackage[text={16.4cm,24.5cm}]{geometry}  % paper size :: A4

你可以明显地工作纸张大小为构建脚本或生成文件过或修改上面的脚本的.dvi文件..或推广该脚本以其他修改。



Answer 3:

为了提供我的论文中都需要的,丑陋的,树浪费格式,以及紧凑的漂亮版本,我用了ifthen的一个杂牌makesed是改写了一下头的。

我认为威尔的方法 更好。



文章来源: Passing command-line arguments to LaTeX document
标签: latex tex