時々、私は次のような新しいコマンドを定義します。
\newcommand{\comment}[1]{\textbf{#1}}
%\necommand{\comment}[1]{\emph{#1}}
上記のコマンドを使用すると、コードの一部のスタイルを一度に変更できます。可能な両方のスタイルを生成したい場合は、ソースコードを変更するたびにLaTeXドキュメントを2回コンパイルして、目的のスタイルを有効にする必要があります。
そのような場合にソースコードの変更を回避する方法はありますか?つまり、latexにコマンドライン引数を渡して、その引数に基づいて使用するスタイルを選択できるようにできますか?
つまり、latexにコマンドライン引数を渡して、その引数に基づいて使用するスタイルを選択できるようにできますか?
はい。 3つのオプション:
ソースファイルに、
\providecommand{\comment}[1]{\emph{#1}}% fallback definition
次に、LaTeXドキュメント( "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
あなたの後ろに。
履歴書でポジションラインを変更するなど、かなり柔軟な1回限りのオプションが必要な場合は、ウィルのアプローチを使用する必要があります。同じオプションの選択肢を繰り返し作成している場合は、コマンドライン引数を回避するか、それらをビルドスクリプトまたはメイクファイルに組み込むことを検討する必要があります。
コマンドライン引数を回避するための2つのテクニックを紹介します。
トリック1: 2つのスタイルの例のように、アクセス可能な状態を維持する必要があるドキュメントの固定配列を作成する場合は、Willのラテックスコードを別のtexファイル、つまりthesis.tex内に実装することをお勧めします。 \providecommand\comment[1]{\emph{#1}}
が含まれており、thesis-ugly.texは\newcommand\comment[1]{\textbf{#1}} \input thesis.tex
で構成されています。
もちろん、中間ファイルala ln -s thesis.aux thesis-ugly.aux
およびln -s thesis.bbl thesis-ugly.bbl
をシンボリックリンクしない限り、この手法を使用するときは、bibtexなどのツールを再実行する必要があります。
トリック2:ドキュメントの用紙サイズを変更するのに厄介なトリック1を見つけたので、単にpapersizeと呼ばれる次のPerlスクリプトを書きました。コマンドpapersize A4 teaching.tex
は、teaching.texを適切に変更し、teaching.pdfをteaching-A4.pdfにシンボリックリンクします。これにより、pdflatex teaching
を実行すると、teaching-A4.pdfが作成されますが、既存のティーチングは妨げられません。 -letter.pdf。bibtex teaching
を再実行する必要はありません。内部参照のあるドキュメントに対してpdflatexを2回再実行する必要があることは明らかです。
#!/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ファイル用のスクリプトを変更したり、スクリプトを他の変更に一般化したりすることもできます。
必要な、醜い、ツリーを無駄にするフォーマットとコンパクトできれいなバージョンの両方で論文を提供するために、私はifthen
とmake
とsed
を使用して少し書き直しましたヘッダーの。
ウィルのアプローチ はallの方がいいと思います。