Pergunta

Às vezes, eu defino novos comandos, como a seguir.

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

Os comandos acima permitem-me para mudar o estilo de partes do meu código de uma só vez. Se eu quero gerar ambos os estilos possíveis, eu tenho que compilar meu documento LaTeX duas vezes cada vez que modificar o código-fonte para permitir o estilo desejado.

Existe uma maneira de evitar a modificação do código fonte em tais casos? Ou seja, eu posso passar látex alguns argumentos de linha de comando para que eu possa escolher o estilo a usar com base no que o argumento?

Foi útil?

Solução

Isto é, eu posso passar látex alguns argumentos de linha de comando para que eu possa escolher o estilo a usar com base no que o argumento?

Sim. Três opções:

Uma

Em seu arquivo de origem, escreva

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

e, em seguida, compilar o documento LaTeX ( "myfile.tex") como

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

Dois

Como alternativa,

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

e depois ter na fonte

\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

Três

Ou mesmo

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

com

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

que é provavelmente o mais curto, embora ligeiramente frágil porque você nunca sabe quando um pacote pode definir \myflag atrás das costas.

Outras dicas

Você deve usar abordagens de Will quando você precisa de one-off bastante flexível opções, como por exemplo mudar a linha de posição em seu currículo. Se otoh você está produzindo a mesma seleção de opções sobre &, então você deve considerar evitando argumentos de linha de comando, ou trabalhar-los em um script de construção ou makefile.

Vou te dar duas técnicas para evitar argumentos de linha de comando:

Truque 1: Se você está produzindo um conjunto fixo de documentos que devem permanecer acessíveis, como o seu dois estilos exemplo, então eu recomendo simplesmente implementando código de látex de Will dentro de outro arquivo tex, ou seja, thesis.tex contém uma \providecommand\comment[1]{\emph{#1}} e tese-ugly.tex consiste em \newcommand\comment[1]{\textbf{#1}} \input thesis.tex.

Você deve de ferramentas de curso executar novamente como bibtex quando se utiliza esta técnica, a menos que você ligar simbolicamente os arquivos intermediários, ala ln -s thesis.aux thesis-ugly.aux e ln -s thesis.bbl thesis-ugly.bbl.

Truque 2: eu encontrei truque 1 embaraçosa para mudar papersizes documento, então eu escrevi o seguinte script Perl, chamado simplesmente paperSize. O teaching.tex modifica comando papersize A4 teaching.tex no lugar, e links simbólicos teaching.pdf ao ensino-A4.pdf, de modo que a execução de pdflatex teaching cria ensino-A4.pdf, mas não perturbe a pré-existente de ensino-letter.pdf e não requer executar novamente bibtex teaching. Ele, obviamente, exigem executar novamente pdflatex duas vezes para documentos com referências internas.

#!/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 $_);
} }
}

Você deve adicionar os comentários especiais % paper size :: ... para cada linha do arquivo que deve ser alterado quando altera o tamanho do papel.

\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

Você poderia, obviamente, o trabalho papersize em um script de construção ou makefile demais ou modificar o script acima para .dvi arquivos .. ou generalizar o script para outras modificações.

Para fornecer a minha dissertação em ambos os,, formato desperdício árvore feia necessário, e uma versão mais bonita compacto, eu usei ifthen um um remendo de make e sed que reescreveu um pouco do cabeçalho.

Eu acho abordagens de Will são todas melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top