如果可用空间太窄,则自动抑制多列布局

如果可用空间太窄,则自动抑制多列布局

我正在使用 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}

我撰写的文章偶尔也会在不同的媒体上发表

  1. 更小\textwidth和/或
  2. 在(狭窄的)迷你页面内

将来所有文章也可能发表在

  1. 公司内网上的 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< \mylengthmulticols则不使用,否则使用。

将长度设置\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您将获得:

在此处输入图片描述

相关内容