如何在命令内部打印文本而不影响其宽度?

如何在命令内部打印文本而不影响其宽度?

我正在尝试在命令内打印,但打印后我看到要打印的文本(命令的参数)的长度发生了变化......

我想知道这其中有什么原因以及我该如何避免这种情况。

我会尽力回答我的问题...但可能不会给出最好的答案...所以,如果你愿意,你可以尝试回答...

梅威瑟:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\setlength\parskip{10pt}
\setlength\parindent{0pt}

\newcommand{\myprint}[1]{
#1
}


\begin{document}



\section{In a section}

This is a text that will occupy  one full line and some more, I hope I can show it



\myprint{This is a text that will occupy  one full line and some more, I hope I can show it}

\end{document}

输出:

在此处输入图片描述

答案1

删除虚假空格(标记为)。我还删除了和<--的虚假参数。如果您不想缩进单个段落,请使用。如果您不想缩进\parskip\parindent\noindent每一个段落,使用该parskip包,但这会使印刷工的眼睛流血。

\documentclass{article}
\usepackage[utf8]{inputenc}

\newcommand{\myprint}[1]{% <--
#1% <--
}

\begin{document}

\noindent This is a text that will occupy  one full line and some more, I hope I can show it

\noindent\myprint{This is a text that will occupy  one full line and some more, I hope I can show it}

\end{document}

在此处输入图片描述

答案2

编辑:长答案以了解发生了什么

(欲了解更简短的答案,请参阅@Henri Menke 的回答)

许多 LaTeX 用户也是程序员,作为 LaTeX 用户,您会成为某种程序员。编码对于结构样式有一些规则,因此编写 C 程序时,我们可以在以下样式之间进行选择:

1.

#include <stdio.h>

int main(void)
{
  int i=0;
  for (i=0;i<10;i++)
  {
     printf("Loop Count i=%d",i);
  }
     return 0;
}

2.

#include <stdio.h>

int main(void){
   int i=0;
   for (i=0;i<10;i++){
      printf("Loop Count i=%d",i);
   }
   return 0;
}

或 3.

#include <stdio.h>

int main(void){
   int i=0;
   for (i=0;i<10;i++){printf("Loop Count i=%d",i);}
   return 0;
}

在 C 编程中结果完全相同,但在 LaTeX 编码中类似的结果不会相同。

空行

一个原因是,在 LaTeX 编码中,空行相当于 \par 命令并插入一个段落。因此,下一个示例将生成以下输出:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{parskip}

\setlength{\parindent}{8pt}

\setlength{\parskip}{15pt}
\newcommand{\myprint}[1]{

#1

}


\begin{document}



\section{In a section}

First line in first section

\def\mymaintext{This is my  text that will occupy a big part of remaining line.}

Test before.\mymaintext
Test line after.

Test before.\myprint{\mymaintext}
Test line after.
\end{document}

在此处输入图片描述

空间

通过删除空行,我们从打印命令中删除了 \par 命令,但没有删除空格:

\newcommand{\myprint}[1]{
#1
}

上述命令将在我们的参数前生成一个额外的空格(那里会有一个空格)并在其后生成一个额外的空格(后面有两个空格)。

以下更改是等效的:

\newcommand{\myprint}[1]{#1}

或者

\newcommand{\myprint}[1]{%
#1%
}

并且我们已经删除了多余的空白处。

更多内容请查看主题太空代币@TH. 在问题的评论中给了我这个信息。


以下答案是我在了解到底发生了什么之前的第一个答案,我把它留在这里,供那些会阅读评论的人参考

我确实不知道为什么会发生这种情况,但我发现一个解决方案是在 width=\linewidth 的小页面中打印。

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\setlength\parskip{10pt}
\setlength\parindent{0pt}

\newcommand{\myprint}[1]{
\begin{minipage}{\linewidth}
#1
\end{minipage}
}


\begin{document}



\section{In a section}

This is a text that will occupy  one full line and some more, I hope I can show it



\myprint{This is a text that will occupy  one full line and some more, I hope I can show it}

\end{document}

输出:

在此处输入图片描述

相关内容