Sed script inserindo e anexando no lugar errado somente em um lugar específico

1

Estou tentando converter man pages para tex e continuo recebendo

\item[

no começo do arquivo e

] \hfill \

Após a parte das man pages, onde mostra ENV (1L). Tudo parece estar funcionando.

Este é o meu tex.sed:

/^\<[A-Z]*[A-Z]/i \
\item[

/^\<[A-Z]*[A-Z]/a \
] \hfill \\

1i\
\documentstyle[11pt]{article} \
\begin{document}


1i\
\begin{center} {\bf 

1a\
\} \end{center}


2i\
\begin{description}

$a\
\end{description}

$a\
\end{document}


s/\/\verb\+\\+/g
s/%/\%/g
s/\^/\\^/g
s/--/-\hspace\{.01cm\}-/g

s/^+/ \\/
s/^-/ \\/

Aqui está env.ascii:

ENV(1L)


NAME
      env - run a program in a modified environment

SYNOPSIS
      env    [-]    [-i]    [-u   name]   [--ignore-environment]
      [--unset=name] [name=value]... [command [args...]]

DESCRIPTION
      This manual page documents the GNU version  of  env.   env
      runs  a  command with an environment modified as specified
      by the command line  arguments.   Arguments  of  the  form
      'variable=value'  set the environment variablevariable to
      valuevalue.  value may be empty ('variable=').  Setting a
      variable to an empty value is different from unsetting it.

      The  first  remaining  argument  specifies  a  program  to
      invoke;  it is searched for according to the specification
      of the PATH environment variable.  Any arguments following
      that are passed as arguments to that program.

      If  no command name is specified following the environment
      specifications,  the  resulting  environment  is  printed.
      This is like specifying a command name of 'printenv'.

OPTIONS
     -u, --unset name
             Remove  variable name  from the environment, if it
             was in the environment.

     -, -i, --ignore-environment
             Start  with  an  empty  environment,  ignoring  the
             inherited environment.

      The  long-named options can be introduced with '+' as well
      as '--', for compatibility with previous releases.   
      Eventually  support  for  '+'  will  be removed, because it 
      is incompatible with the POSIX.2 standard.

E é assim que eu estou compilando:

sed -f tex.sed env.ascii > env.tex

É assim que meu env.tex é:

\documentstyle[11pt]{article} 
\begin{document}
\begin{center} {\bf 
\item[
ENV(1L)
] \hfill \
} \end{center}
\begin{description}


\item[
NAME
] \hfill \
      env - run a program in a modified environment

\item[
SYNOPSIS
] \hfill \
      env    [-]    [-i]    [-u   name]   [-\hspace{.01cm}-ignore-environment]
      [-\hspace{.01cm}-unset=name] [name=value]... [command [args...]]

\item[
DESCRIPTION
] \hfill \
      This manual page documents the GNU version  of  env.   env
      runs  a  command with an environment modified as specified
      by the command line  arguments.   Arguments  of  the  form
      'variable=value'  set the environment variablevariable to
      valuevalue.  value may be empty ('variable=').  Setting a
      variable to an empty value is different from unsetting it.

      The  first  remaining  argument  specifies  a  program  to
      invoke;  it is searched for according to the specification
      of the PATH environment variable.  Any arguments following
      that are passed as arguments to that program.

      If  no command name is specified following the environment
      specifications,  the  resulting  environment  is  printed.
      This is like specifying a command name of 'printenv'.

\item[
OPTIONS
] \hfill \
     -u, --unset name
             Remove  variable name  from the environment, if it
             was in the environment.

     -, -i, --ignore-environment
             Start  with  an  empty  environment,  ignoring  the
             inherited environment.

      The  long-named options can be introduced with '+' as well
      as '-\hspace{.01cm}-', for compatibility with previous releases.   
      Eventually  support  for  '+'  will  be removed, because it 
      is incompatible with the POSIX.2 standard.
\end{description}
\end{document}

Nota

O resultado final deve ser um script sed que converte corretamente a página man para um arquivo .tex . Por favor, não sugira respostas com uma abordagem diferente para o problema.

    
por Marcus Lorenzana 18.09.2013 / 06:48

2 respostas

3

Se o resultado desejado for apenas as páginas man em formato PDF, man poderá fazer isso por você. Você precisará do conjunto de ferramentas ghostscript e poderá fazer o seguinte, por exemplo, para obter a página bash(1) no formato PDF:

man -T ps bash|ps2pdf - bash.pdf

Se você pretendia usar o LaTeX para produzir páginas man do DVI, não será necessário ghostscript , pois man pode fazer isso diretamente:

man -T dvi bash >bash.dvi

Citação textual do comentário de Bichoy

The -T ps option is not portable for man. On RHEL6, the correct syntax will be man -t bash, the -t option makes the output as ps using /usr/bin/groff -Tps -mandoc

Algumas notas sobre o script sed

  • O que funcionou para mim é mover as 6 primeiras linhas do seu script depois da linha \begin{center} . Por favor, tente e veja se este é o resultado desejado.
  • Você deve se esforçar bastante para evitar caracteres especiais no conteúdo da (s) página (s) de manual. Seu script atualmente escapa de alguns deles, mas sempre há uma chance de você estar se esquecendo de um ou outro. Eu posso dizer que pelo menos você esqueceu de "e" comercial ( & ) que (La) TeX usa como separador de coluna. É por isso que alguém e eu temos sugerido uma abordagem alternativa para TeXificar a coisa toda você mesmo.
  • O início do seu documento é um erro de digitação ou, na verdade, deveria ser \documentstyle , em oposição a \documentclass ?
  • Para excluir o nome do comando de ser cercado por \item tags, você deve alterar sua regex para corresponder a uma palavra que consiste inteiramente em letras maiúsculas: altere \<[A-Z]*[A-Z] para algo como ^\s*[A-Z][A-Z]*\s*$ .
por 18.09.2013 / 13:08
1

você verificou um conversor troff-to-latex como tr2latex ?

pode fazer exatamente o que você está tentando fazer.

    
por 18.09.2013 / 13:02