\ LaTeX中多列文档的文本宽度?

时间:2010-07-18 20:49:02

标签: latex multiple-columns

正如SO Q & A所示,我发现\ textwidth似乎令人困惑。

这是正常情况下文本的宽度,但是这个变量似乎没有关于带有multicols的文本宽度的正确信息。

这是一个打印出\ textwidth宽度的LaTeX代码(我从here复制了代码)。

\documentclass[]{article}
\usepackage{layouts}
\usepackage{multicol}

\usepackage[left=20mm,right=20mm,top=33.95mm,bottom=33.95mm]{geometry}

\begin{document}
textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}

\begin{multicols}{2}
textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
\end{multicols}

\end{document}

因此,对于多列情况,使用\ textwidth无法获得带框的文本。

\begin{tikzpicture}
  \draw node[draw=black,fill=black!20,rounded corners,inner sep=2ex,text width=\textwidth] {
    Lorem ipsum dolor sit amet \dots
    };
\end{tikzpicture}

\colorbox{red}{\parbox{\textwidth}{Black text on red background}}
  • 如何知道多列文档的真实\ texwidth?
  • \ linewidth有什么问题?我尝试了以下示例,但结果不正确,如图所示。 \ listing环境给我正确的结果。

\documentclass[]{article}
\usepackage{layouts}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{color}
\usepackage{listings}

\usepackage[left=20mm,right=20mm,top=33.95mm,bottom=33.95mm]{geometry}

\begin{document}
textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}

\colorbox{darkgray}{Black text on red background}

\noindent\colorbox{darkgray}{\parbox{\linewidth}{Black text on red background}}

\begin{multicols}{2}


This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.

textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}

This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.


\noindent\colorbox{darkgray}{Black text on red background}

\noindent\colorbox{darkgray}{\parbox{\linewidth}{Black text on red background}}

\noindent\begin{tikzpicture}
  \draw node[draw=black,fill=black!20,rounded corners,inner sep=2ex,text width=\linewidth] {
    Lorem ipsum dolor sit amet \dots
    };
\end{tikzpicture}

\definecolor{darkgray}{rgb}{0.95,0.95,0.95}
\lstset{backgroundcolor=\color{darkgray}}
\lstset{columns=fullflexible, basicstyle=\ttfamily,  basicstyle=\tiny, numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt}
\begin{lstlisting}[frame=tb]
(let ((buffer (url-retrieve-synchronously
           "http://tromey.com/elpa/package-install.el")))
  (save-excursion
    (set-buffer buffer)
    (goto-char (point-min))
    (re-search-forward "^$" nil 'move)  ;;$
    (eval-region (point) (point-masx))
    (kill-buffer (current-buffer))))
\end{lstlisting}

\end{multicols}

\end{document}

http://img571.imageshack.us/img571/1867/screenshot20100718at407.png

1 个答案:

答案 0 :(得分:2)

看看下面的代码,这会导致框与列文本的右边距齐平。似乎\ multicol环境中的\ linewidth 文本的宽度。相反,列文本的宽度计算(我认为)为\ linewidth - (\ columnsep / #ofCols)。同样使用tikz图片时,内部分隔会添加到框的宽度,因此在设置框宽时必须减去它。至少在我看来是这样的:

\documentclass[]{article}
\usepackage{layouts}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{color}
\usepackage{listings}

\usepackage[left=20mm,right=20mm,top=33.95mm,bottom=33.95mm]{geometry}

\begin{document}
textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}

\colorbox{darkgray}{Black text on red background}

\noindent\colorbox{darkgray}{\makebox[\linewidth]{Black text on red background}}

\begin{multicols}{2}


This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.

textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}
\newlength{\mywidth}
\setlength{\mywidth}{\linewidth}
\addtolength{\mywidth}{-0.5\columnsep}
\newlength{\mytikzwidth}
\setlength{\mytikzwidth}{\linewidth}
\addtolength{\mytikzwidth}{-4ex}
mywidth: \the\mywidth\\ columnsep: \the\columnsep\\
\noindent\colorbox{lightgray}{\makebox[\mywidth][c]{Black text on red background}}

This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.


\noindent\colorbox{darkgray}{Black text on red background}
mywidth: \the\mywidth columnsep: \the\columnsep colwidth: \the\columnwidth \\

\noindent\colorbox{lightgray}{\makebox[\mywidth][c]{Black text on red background}}

\noindent\begin{tikzpicture}
  \draw node[draw=black,fill=black!20,rounded corners,inner sep=2ex,text width=\mytikzwidth] {
    Lorem ipsum dolor sit amet \dots
    };
\end{tikzpicture}

\definecolor{darkgray}{rgb}{0.95,0.95,0.95}
\lstset{backgroundcolor=\color{darkgray}}
\lstset{columns=fullflexible, basicstyle=\ttfamily,  basicstyle=\tiny, numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=15pt}
\begin{lstlisting}%[frame=tb]
(let ((buffer (url-retrieve-synchronously
           "http://tromey.com/elpa/package-install.el")))
  (save-excursion
    (set-buffer buffer)
    (goto-char (point-min))
    (re-search-forward "^$" nil 'move)  ;;$
    (eval-region (point) (point-masx))
    (kill-buffer (current-buffer))))
\end{lstlisting}

\end{multicols}

\end{document}