Pregunta

A veces, defino nuevos comandos tales como los siguientes.

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

Los comandos anteriores me permiten cambiar el estilo de partes de mi código a la vez. Si quiero generar tanto de los estilos posibles, tengo que compilar mi documento LaTeX dos veces cada vez que modificar el código fuente para que el estilo deseado.

¿Hay una manera de evitar la modificación del código fuente en estos casos? Es decir, puedo pasar látex algunos argumentos de línea de comandos para que pueda elegir el estilo a utilizar en función de ese argumento?

¿Fue útil?

Solución

  

Es decir, puedo pasar de látex algunos argumentos de línea de comandos para que pueda elegir el estilo a utilizar en función de ese argumento?

Sí. Hay tres opciones:

En el archivo de origen, escriba

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

y luego compilar el documento de látex ( "myfile.tex") como

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

Dos

Alternativamente,

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

y luego tener en la fuente

\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

O incluso

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

con

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

que es probablemente la más corta, aunque un poco frágil, porque nunca se sabe cuando un paquete podría definir \myflag detrás de la espalda.

Otros consejos

Debe utilizar enfoques de Will cuando se necesita opciones únicas bastante flexibles, como decir que el cambio de la línea de posición en su curriculum vitae. Si Otoh que se está produciendo la misma selección de opciones de una y otra, entonces usted debe considerar evitar los argumentos de línea de comandos, o ellos trabajando en un script de construcción o makefile.

Voy a dar dos técnicas para evitar los argumentos de línea de comandos:

Truco 1: Si usted está produciendo una matriz fija de documentos que sean accesibles, como su ejemplo, dos estilos, y luego se lo recomiendo simplemente la implementación de código de látex de Will dentro de otro archivo tex, es decir, thesis.tex contiene un \providecommand\comment[1]{\emph{#1}} y tesis-ugly.tex consta de \newcommand\comment[1]{\textbf{#1}} \input thesis.tex.

Debe de herramientas supuesto volver a ejecutar como bibtex cuando se utiliza esta técnica, a menos que simbólicamente los archivos intermedios, ala ln -s thesis.aux thesis-ugly.aux y ln -s thesis.bbl thesis-ugly.bbl.

Truco 2: He encontrado truco 1 incómodo para cambiar papersizes de documentos, por lo que escribió el siguiente script Perl, llamado simplemente PaperSize. El papersize A4 teaching.tex comando modifica teaching.tex en su lugar, y enlaces simbólicos teaching.pdf a la enseñanza-A4.pdf, de manera que pdflatex teaching corriendo crea enseñanza-A4.pdf, pero no perturba la preexistente enseñanza-letter.pdf y no requiere volver a ejecutar bibtex teaching. No, obviamente, requiere volver a ejecutar pdflatex dos veces para documentos con referencias 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 $_);
} }
}

Debe añadir comentarios del % paper size :: ... especial a cada línea del archivo que se debe cambiar cuando se cambia el tamaño del 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

Se podría, obviamente, trabajar papersize en un script de construcción o makefile demasiado o modificar la secuencia de comandos para archivos .dvi .. o generalizar el guión a otras modificaciones.

Para proporcionar mi tesis, tanto en el formato requerido emaciación, feo, árbol, y una versión más bonita compacto, he usado un ifthen un kludge de make y sed que volvió a escribir un poco de la cabecera.

de Will son todos más agradable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top