代码之家  ›  专栏  ›  技术社区  ›  prosseek

\textwidth用于乳胶中的多列文档?

  •  4
  • prosseek  · 技术社区  · 14 年前

    像这样 SO Q & A 显示时,我发现\textwidth似乎很混乱。

    这是一个LaTeX代码,用于打印\textwidth的宽度(我从 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}
    

    \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}}
    
    • 如何知道多栏文档的实际宽度?
    • 宽度有什么问题?我尝试了下面的示例,但结果不正确,如图所示。\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 回复  |  直到 7 年前
        1
  •  2
  •   Herbert Sitz    14 年前

    请看下面的代码,它会导致框与列文本的右边距齐平。multicol环境中的宽度似乎是 文本的宽度。相反,列文本的宽度计算(我认为)为\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}