代码之家  ›  专栏  ›  技术社区  ›  reprogrammer

将命令行参数传递给LaTeX文档

  •  56
  • reprogrammer  · 技术社区  · 16 年前

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

    在这种情况下,有没有办法避免修改源代码?也就是说,我可以向latex传递一些命令行参数,以便根据该参数选择使用哪种样式吗?

    4 回复  |  直到 16 年前
        1
  •  72
  •   Will Robertson    16 年前

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

    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

        2
  •  5
  •   Jeff Burdges    14 年前

    如果你正在生成一组必须保持可访问的固定文档,就像你的两种样式示例一样,那么我建议你在另一个tex文件中简单地实现Will的latex代码,即thesis.tex包含一个 \providecommand\comment[1]{\emph{#1}} \newcommand\comment[1]{\textbf{#1}} \input thesis.tex .

    当然,在使用此技术时,您必须重新运行bibtex等工具,除非您将中间文件符号链接,ala ln -s thesis.aux thesis-ugly.aux ln -s thesis.bbl thesis-ugly.bbl .

    我发现改变文档纸张大小的技巧1很尴尬,所以我编写了以下perl脚本,简称为papersize。命令 papersize A4 teaching.tex 在适当的位置修改teaching.tex,并将teaching.pdf符号链接到teaching-A4.pdf,以便运行 pdflatex teaching 创建teaching-A4.pdf,但不会干扰已有的teaching-letter.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文件的脚本。或将脚本推广到其他修改。

        3
  •  1
  •   Evan    4 年前

    这可能不是所讨论情况的最佳解决方案(也是一篇非常古老的帖子),但我想我会提出一个对我有用的替代解决方案。它只是在两个不同的文件中定义两个命令,将第三个文件链接到所需的选项,然后输入第三个档案。 例如,定义:

    % in main.tex
    \input{options}
    % ...
    

    .

    % in option1.tex
    \newcommand{\comment}[1]{\textbf{#1}}
    

    .

    % in option2.tex
    \newcommand{\comment}[1]{\emph{#1}} 
    

    > ln -s option1.tex options.tex && pdflatex main.tex
    

        4
  •  -1
  •   Community Mohan Dere    9 年前

    为了以所需的、丑陋的、浪费树木的格式和更简洁漂亮的版本提供我的论文,我使用了 ifthen 一个笨拙的 make sed 这改写了标题的一部分。

    Will's approaches 全部