我正在使用 pdfLaTeX(在 MikTex 中)为公司通讯撰写技术文章。
在任何一篇文章中,我都会在两列布局(用于描述性文本)和一列布局(用于代码段、图形、表格等)之间切换。
%newsletterA4.text
\documentclass[a4paper,12pt]{article}
\usepackage{multicol}
\usepackage{lipsum}
\begin{document}
\input{editorial.tex}
\input{article1.tex}
\input{article2.tex}
\end{document}
典型的文章文件:
% article1.tex
Headings go over the full text width
\begin{multicols}{2}
\lipsum
\end{multicols}
\begin{verbatim}
code listing (or figure or image go over the full text width)
\end{verbatim}
\begin{multicols}{2}
\lipsum
\end{multicols}
我撰写的文章偶尔也会在不同的媒体上发表
- 更小
\textwidth
和/或 - 在(狭窄的)迷你页面内
将来所有文章也可能发表在
- 公司内网上的 html
在这些情况下,我更喜欢单列布局。目前,我运行一个脚本创建文章文件的替代版本,注释掉和\begin{multicols}
。\end{multicols}
不太优雅
有没有办法让 LaTeX 自动处理这个问题?
比如:
如果\textwidth
小于某个值,则忽略多列环境。
小型页面是否有其自己的\textwidth
参数,以便也可以进行测试?
我承认,我还没有研究过 latex2html 主题(还没有网络存在),但我想提一下,以防它影响答案。如果能告诉我如何“忽略”多列以在 html 中发布,我将不胜感激。
提前谢谢您!
答案1
您可以mymulticols
用这种方式定义一个新环境
\newenvironment{mymulticols}[1]
{\ifdim\textwidth<\mylength\else\begin{multicols}{#1}\fi}
{\ifdim\textwidth<\mylength\else\end{multicols}\fi}
因此,如果\textwidth
< \mylength
,multicols
则不使用,否则使用。
将长度设置\mylength
为所需值。在此示例中,我设置了
\newlength{\mylength}
\setlength{\mylength}{20cm}
并且由于\textwidth
<20cm
在这种情况下,multicols
被丢弃。
梅威瑟:
\documentclass[a4paper,12pt]{article}
\usepackage{multicol}
\usepackage{lipsum}
\newlength{\mylength}
\setlength{\mylength}{20cm}
\newenvironment{mymulticols}[1]
{\ifdim\textwidth<\mylength\else\begin{multicols}{#1}\fi}
{\ifdim\textwidth<\mylength\else\end{multicols}\fi}
\begin{document}
\begin{mymulticols}{2}
\lipsum
\end{mymulticols}
\begin{verbatim}
code listing (or figure or image go over the full text width)
\end{verbatim}
\begin{mymulticols}{2}
\lipsum
\end{mymulticols}
\end{document}
输出:
如果将的值更改\mylength
为,10cm
您将获得: