我从来没有在 Latex 中做过任何涉及太复杂的编码(不仅仅是在这里和那里编写和定制一些东西),所以我很难找到我需要的东西。
我需要我的项目以两种大小进行编译,a4paper
和a5paper
,作为选项传递给\documentclass[]{article}
命令。
我只需选择一个选项,生成一个 PDF,然后将其更改为 A5 并再次编译。现在,如果是 A5 或 A4 模式,文档的某些部分应该会有所不同,我不知道该怎么做。
我该怎么做呢?比如
\if @pagesize=a4paper
do stuff
\fi
这样可行?
先感谢您。
编辑:我读到过,旧的 PlainTeX 条件在某些情况下会导致意外行为,但我在里面做的事情其实很简单,比如放\hspace
s 之类的东西,所以如果这些条件很简单,我愿意使用它们。显然,如果可以用其他更好的方式做到这一点,我也想知道。
答案1
据我所知,纸张尺寸选项并非直接存储在宏中,但这可能有效。
我已经引入了一个默认\newif\ifafourpaper
值,如果使用false
该选项,则设置为 true 。a4paper
从中article.cls
,我分别窃取了\DeclareOption
和a4paper
,a5paper
其中布尔宏\ifafourpaper
是相应地设置的。
重要的
\ProcessOptions
由于选项声明已改变,因此必须明确使用!
\documentclass[a5paper]{article}
\usepackage{blindtext}
\newif\ifafourpaper
\afourpaperfalse
\DeclareOption{a4paper}
{\setlength\paperheight {297mm}%
\setlength\paperwidth {210mm}%
\afourpapertrue%
}
\DeclareOption{a5paper}
{\setlength\paperheight {210mm}%
\setlength\paperwidth {148mm}%
\afourpaperfalse%
}
\ProcessOptions
\begin{document}
\ifafourpaper
\blindtext[2]
\else
\blindtext
\fi
\end{document}
答案2
假设您不使用landscape
模式,您可以根据类别存储的纸张高度来做出决定。
\documentclass[a4paper]{article}
\newcommand\papersize[1]{%
TT\fi
\uppercase{\ifdim\csname #1@PAPER\endcsname}=\paperheight
}
\makeatletter
\@namedef{A4@PAPER}{297mm}
\@namedef{A5@PAPER}{210mm}
\@namedef{B5@PAPER}{250mm}
\@namedef{LETTER@PAPER}{11in}
\@namedef{LEGAL@PAPER}{14in}
\@namedef{EXECUTIVE@PAPER}{10.5in}
\makeatother
\begin{document}
\if\papersize{a4}
We're using A4 paper
\else
We're not using A4 paper
\fi
\if\papersize{A5}
We're using A5 paper
\else
We're not using A5 paper
\fi
\end{document}
输出变为
如果\documentclass[a5paper]{article}
使用的话。
请注意,您可以自由使用 或A5
;我为对应于、、、和的a5
参数定义了值,这些值是 和其他标准类已知的所有大小。其他值可以随意添加。a4
a5
b5
letter
legal
executive
article