2009-08-21 27 views
7

Uso el comando \todo del paquete \todonotes. Me gustaría a la disposición mi fuente de poner \todos por separado del párrafo anterior:LaTeX: ¿evita el nuevo párrafo?

Some text. 

\todo{make note} 

Pero no quiero \todo para comenzar un nuevo párrafo, o se estropea el espaciamiento del documento.

¿Hay algún comando para evitar esto?

Si hubiera un comando/paquete para consumir el espacio en blanco hasta él, entonces podría redefinir \todo para usarlo.

Editar: Agregar un% entre todo es obviamente muy irritante. ¿Algo más?

+1

¿No está agregando un solo carácter por '\ todo' la solución menos irritante que podríamos obtener? – voyager

+0

voyager: No, no quiero agregar ningún personaje. Lo mejor que podemos hacer es tener un comando (digamos \ consumir) que consuma el espacio en blanco que lo conduce, para poder redefinir \ todo para usar \ consumir. –

+1

Hay \ unskip para eliminar el último espacio horizontal, pero el separador de párrafo es una historia completamente diferente. –

Respuesta

9

Tengo que estar de acuerdo con todos los demás en que probablemente solo deberías agregar el %, pero encuentro esta pregunta inte descansando El problema es que tan pronto como LaTeX lee la línea vacía, se convierte en el comando \par, que finaliza el párrafo anterior. Al comienzo de \todo, ese comando \par ya se ha ejecutado, y es imposible deshacerlo (creo). Entonces, su única esperanza es evitar que se inserte ese \par o que se comporte como lo hace normalmente. Si desea evitar que se inserte, puede intentar leer el Capítulo 8 de "The TeXbook", que debería indicarle cómo se convierte una línea vacía en \par. Alternativamente, podría tratar de hacer una solución basada en el siguiente tipo de idea:

 
Some text.{\let\par\relax 

\todo{make note}} 

Pero ten cuidado! Definitivamente no desea globalmente cambiar el comportamiento de \par, por eso agregué un par adicional de llaves (los comandos LaTeX tienen un ámbito, por lo que la nueva definición de \par solo tiene efecto dentro del grupo donde se realizó la definición) Buena suerte.

+0

Creo que esta es la respuesta más correcta que puedo obtener. –

4

Prueba esto:

 
Some text. 
% 
\todo{make note} 
+0

Agregar un% entre todo es obviamente muy irritante. ¿Algo más? –

+0

@Paul Biggar Claramente, usted y yo tenemos diferentes tolerancias. ;-) –

+1

@Sinan Ünür: Bueno, tengo que hacerlo en todas partes. Es por eso que pedí un comando para consumir espacios en blanco. –

2

¿Qué tal

Some text. 
% 
\todo{make note} 
% 
some more text 
+0

Agregar un% entre todo es obviamente muy irritante. ¿Algo más? –

+1

Debe haber algo mal conmigo porque he estado haciendo esto desde 1993 cuando quería dejar algo de espacio en medio de un párrafo sin LaTeX creando párrafos. Nunca estuve motivado para siquiera preguntarme si hay alguna otra forma de hacerlo. –

+1

@Sinan Ünür: Claramente, carecía de un proyecto importante para posponer las cosas;) –

2

puede ser que usted no debe dejar nueva línea entre el texto y la nota de tarea o simplemente comentar que

Some text. 
% 
\todo{make note} 
+0

Agregar un% entre todo es obviamente muy irritante. ¿Algo más? –

+0

no estoy seguro de si esto funcionaría, pero si desea dejar una nueva línea entre el texto y la nota, podría intentar agregar un carácter de retroceso al comando \ b \ todo {anotar} – stefita

+1

¿Olvidó la línea en blanco por completo?La única forma de que latex comience un nuevo párrafo es una línea en blanco – Martijn

0

simplemente incluya su \ todo a la derecha en el medio de su texto. sin salto de línea, sin nada.

blah blah blah text \ todo {¡Haz esto ahora!} Más texto blah blah blah.

en mi computadora (win xp, miktex 2.7, texniccenter) funciona bien, no produce ningún salto de línea y coloca la nota pendiente en el margen. . .

+2

Creo que el interrogador original realmente quiere que el '\ todo' sea visualmente distintivo en ** la fuente **. –

+0

con el especificador del paquete todo, como \ todo [en línea] {para hacer texto} agrega el que hacer en el margen con una línea que lo conecta al texto ... si usa la opción [en línea] tomará toda la línea y coloque el color de fondo en naranja de forma predeterminada. – Mica

2

Conjunto \endlinechar=-1 para hacer que las líneas vacías no tengan ningún efecto. Tendrá que usar \par para separar los párrafos, lo que creo que es una irritación mayor que tener que escribir % en las líneas de separación, pero eso es lo que está pidiendo.

+0

Lo que realmente estoy pidiendo es la capacidad de decir "la última línea en blanco no tuvo ningún efecto. Pero muy interesante, gracias. –

+0

No creo que eso vaya a ser fácil. Cuando TeX ya ha tomado la última línea en blanco como separador de párrafos, ha finalizado el párrafo anterior y lo ha agregado a la lista de cuadros de la página, y posiblemente haya decidido que la página estaba llena y llamó a la rutina de salida de la página. Dudo en decir que deshacer esto es imposible. solicite los trucos que los asistentes de TeX pueden hacer, pero creo que necesita encontrar a alguien que esté íntimamente familiarizado con TeX para ayudarlo con esto. –

1

¿Qué tal si dejamos todo lo que todavía tiene trabajo por hacer dentro de las etiquetas \ def y luego lo quitamos y lo trasladamos al documento propiamente dicho cuando ya no queda trabajo por hacer?

E.g.

\def \par1 
{ 
It was the best of times, it was the 
} 

\def \par2000 
{ 
"Repression is the only lasting philosophy. The dark deference of fear and slavery, my friend," observed the Marquis 
} 

\def \paridunno 
{ 
The end 
} 

Un cuento de dos ciudades, de Charles Dickens

\par1 
\todo{write a whole bunch of pages} 
\par2000 
\todo{Visit ghost of Christmas future, copy pages from finished book} 
\paridunno 
\todo{Think of a better ending} 

Eso tiene la ventaja añadida de que le da un \ listoftodos tanto en la fuente, literalmente, y

en la salida.

6

Cuando la macro precede al espacio no deseado, el% no es necesario si utiliza \ @ifnextchar y \ @gobble.

Considere algo así como (en el preámbulo, por supuesto):

\makeatletter 
\let\oldtodo\todo 
\renewcommand\todo[1]{% 
\oldtodo{#1}% 
\@ifnextchar\par{\@gobble}{}} 
\makeatother 

esta manera, si usted tiene algo así como:

\todo{Stuff} 

Things 

Actuará el mismo que

\todo{Stuff} 
% 
Things 

o

\todo{Stuff} 
Things 

Puede generalizar este tipo de cosas con una macro como

\makeatletter 
\newcommand\gobblepars{% 
    \@ifnextchar\par% 
     {\expandafter\gobblepars\@gobble}% 
     {}} 
\makeatother 

A continuación, puede utilizar \gobblepars donde quiera que quiere comer el espacio (como después de que el TODO). También puede volver a definir todo (como se muestra arriba) para colocar automáticamente un \gobblepars después de él.

Para manejar el líder espacio vacío. puede usar \gobblepars también, pero tiene que ser explícito. Por ejemplo:

Some text\gobblepars 

\todo{Stuff} 

evitará que un \ par de aparecer entre las dos líneas.

Cuestiones relacionadas