右对齐内联

右对齐内联

我正在尝试将一些代码右对齐作为 C 语言备忘录的文本换行,但遇到了一些问题......

在下面的例子中,我尝试右对齐“const struct tm *ptm);。”部分,如下所示。

size_t strftime(char *dest, size_t taillemax, const char *format,
                                                                      const struct tm *ptm);

我尝试了 \raggedleft 和 flushright 环境。后者在两条线之间创建了太重要的分隔。我无法让 \raggedleft 执行任何操作。

\documentclass[10pt,a4paper,twoside]{article}
\setlength{\hoffset}{-18pt}
\setlength{\oddsidemargin}{0pt}
\setlength{\evensidemargin}{9pt}
\setlength{\marginparwidth}{54pt
\setlength{\textwidth}{481pt}
\setlength{\voffset}{-18pt}
\setlength{\marginparsep}{7pt}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{13pt}
\setlength{\headsep}{10pt}
\setlength{\footskip}{27pt}
\setlength{\textheight}{680pt}
\setlength{\parskip}{2ex plus .4ex minus .4ex}
\setlength{\parindent}{0pt}
\usepackage{times}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{authblk}
\usepackage{listings}
\usepackage{lastpage}
\usepackage{makeidx}
\makeindex
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead[\leftmark]{}
\chead[]{}
\rhead[]{\leftmark}
\lfoot[\thepage\ sur \pageref{LastPage}]{}
\cfoot[]{}
\rfoot[]{\thepage\ sur \pageref{LastPage}}
\usepackage[titles]{tocloft}

\newcommand\fichier[1]{{\textit{#1}}}
\newcommand\code[1]{{\texttt{#1}}}
\newcommand\tab[1]{{\tt\hspace{#1em}}}

\newenvironment{codepar}{\begin{list}{}{\leftmargin20pt}\item[]\obeylines\obeyspaces\begingroup\parskip0pt\tt}{\endgroup\end{list}\par}

\newcommand\codedescr[2]{{ \noindent\code{#1} \begin{list}{}{\leftmargin20pt}\item[]\begingroup\parskip0pt #2 \endgroup\end{list}\par }}

\newcommand{\superscript}[1]{\ensuremath{^{\texttt{#1}}}}

\renewcommand{\arraystretch}{1.3}

\begin{document}

\codedescr{char *ctime( const time\_t *pSec );\newline
char *asctime( const struct tm *ptm );\newline
size\_t strftime(char *dest, size\_t taillemax, const char *format,\newline
\hfil const struct tm *ptm);\index{fonction2@fonction!ctime}\index{fonction2@fonction!asctime}\index{fonction2@fonction!strftime}}{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}

\end{document}

谢谢你的帮助,塞德里克

答案1

而不是\hfil\hfill使用

\hspace*{\fill}

\hfill相当于\hspace\fill。但是,LaTeX 在某些情况下会删除水平空格,例如在行尾。如果您不想让 LaTeX 删除此空格,请使用带星号的版本\hspace*。顺便说一句,它与\vspace和类似\vspace*

顺便说一句。当我用你的代码测试它是否有效时,我注意到第 5 行缺少一个右括号。我会使用几何学包,而不是手动调整所有这些长度。

答案2

我会以不同的方式定义宏:

\newcommand\fichier[1]{\textit{#1}}
\newcommand\code[1]{\texttt{#1}}
\newcommand\tab[1]{{\ttfamily\hspace*{#1em}}}

\newenvironment{codepar}
  {\renewcommand{\breakfill}[1]{\par\hspace*{\fill}}%
   \begin{list}{}{\leftmargin20pt \parskip0pt} 
   \item[]\obeylines\obeyspaces\ttfamily\ignorespaces}
  {\end{list}}

\newcommand\codedescr[2]{%
  \par\noindent\code{#1}%
  \begin{list}{}{\leftmargin20pt \parskip0pt} 
  \item[]#2\end{list}}

\newcommand{\superscript}[1]{\ensuremath{^{\texttt{#1}}}}
\newcommand{\breakfill}{\newline\hspace*{\fill}}

该命令\breakfill就是您要寻找的将线推到右边距的命令:

\codedescr{char *ctime( const time\_t *pSec );\newline
char *asctime( const struct tm *ptm );\newline
size\_t strftime(char *dest, size\_t taillemax, const char *format,\breakfill
 const struct tm *ptm);%
\index{fonction2@fonction!ctime}%
\index{fonction2@fonction!asctime}%
\index{fonction2@fonction!strftime}}
  {bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
   bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
   bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}

codepar环境中我重新定义,\breakfill以便它不会打印空行(但命令必须在这种情况下,可以用在行尾。

还要注意不同的地方\parskip=0pt;我还删去了许多无用的组:一个环境总是形成一个组。

不要使用\tt,而应该使用\ttfamily。前者是一个过时的命令。

答案3

好吧。要显示代码,可以使用 listings 包。首先看一下文档。并考虑使用几何学包来调整页面布局。

编辑:我刚注意到一个拼写错误,您写的是 \hfil。它应该是 \hfill。

相关内容