新的内联文本命令

新的内联文本命令

由于我没有得到我完全满意的答案我最后一条帖子,尽管有很多很棒的建议。因此,我将尝试在这里重新表述我的问题。我也有一些新的意见、建议和想法,我不想让上一个帖子被无休止的编辑弄得乱七八糟。

这是我的文档的一个最小示例

\documentclass[10pt,a4paper]{article}
\usepackage{microtype}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage{enumitem}
\title{Fy 1001 - Mekanisk Fysikk \\ Øving 8}
\usepackage{changepage}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum

\newcounter{opg}[section]
\renewcommand{\theopg}{\arabic{opg}}
\newcommand{\opg}[1]{\stepcounter{opg} \subsubsection*{Oppgave \theopg #1}     \vspace*{2.25mm}}
\setcounter{opg}{0}

\newcounter{navn}[opg]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{\stepcounter{navn}\paragraph*{\thenavn)}}
\setcounter{navn}{0}

\author{Øistein Søvik}

\date{\today}

\begin{document}
\maketitle

\begin{enumerate}[leftmargin=*,labelsep=1.25em,label=\bfseries\alph*)]
\item Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     masse $m$, om en akse normalt på stanga
gjennom stangas ene ende.
\end{enumerate}

\opg{: Kjerrehjul}
\navn Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     masse $m$, om en akse normalt på stanga
gjennom stangas ene ende.

\lipsum[2-3]

\navn Bestem deretter treghetsmomentet $I_k$ for et kjerrehjul med $N$ eiker     (spiler), hver med masse $m$ og lengde
$R$, og der selve hjulet (felgen) har masse $M$. Du kan betrakte felgen som     en tynn ring med radius $R$.
\navn Hva blir kjerrehjulets totale kinetiske energi K dersom det sitter på     ei kjerre som kjører med hastighet
$V$ ? Vi antar ren rulling for kjerrehjulet.    opg{: Treghetsmoment for diverse stive legemer} 

Bestem treghetsmomentet $I_0$ om en akse gjennom tyngdepunktet/massesenteret til
\navn ei tynn stang med lengde $L$ og masse $M$. (Akse normalt på stanga.)
\navn et tynt kuleskall med radius $R$ og masse $M$. (Tips: $\sin^3 x =     \frac{3}{4} \sin x - \frac{1}{4} \sin 3x$.)
\navn ei kompakt kule med radius $R$ og masse $M$. (Tips: Kompakt kule = sum     av tynne kuleskall.)\\
\\
\opg{: Atwoods maskin med tung skive som trinse}

\navn 

\end{document}

在顶部,我提供了一个无法解决问题的解决方案。我尝试做的几乎就是此enumerate环境所做的。

我试图让问题以字母开头,然后包含一些文本。之后直接内联。如文档所示,enumitem这样做。然而

  1. 它把所有内容都对齐得有点太靠右了。它应该作为第一个项目对齐。

  2. 对于每个问题来说使用起来有点累人/复杂

  3. 每个较大的问题之后它不会重置。

现在最终,我想要定义一些命令或环境,将这个命令中的所有内容内联并跟踪编号。

举个例子

\mycommand{ Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
masse $m$, om en akse normalt på stanga gjennom stangas ene ende. }

应该产生

a)   Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
     masse $m$, om en akse normalt på stanga gjennom stangas ene ende. 

或者

\mycommand{ \item Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
       masse $m$, om en akse normalt på stanga gjennom stangas ene ende. }

应该产生

a)   Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
     masse $m$, om en akse normalt på stanga gjennom stangas ene ende. 

或者为了这个目的而创造环境。

\begin{myenv}
Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
masse $m$, om en akse normalt på stanga gjennom stangas ene ende.
\end{myenv}

a)   Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og     
     masse $m$, om en akse normalt på stanga gjennom stangas ene ende. 

所以是的... 寻找一种简单的方法来创建新命令。将所有内容内联到命令内部。并在开头放置一个计数字母。每次执行后都会重置\opg

所以一切都按原样工作。除了后面的文本\navn没有水平对齐。


编辑:

现在一切都正常了,除了第一个\NR没有对齐。有人知道为什么吗?有自动修复的方法吗?会经常使用此代码,因此自动修复会很好。目前。

这段代码中我还遇到了一些其他问题,那就是间距。目前,间距会根据文本\NR跨行还是跨多行而变化。如果能快速修复,那就太好了。此外,\\在后面添加\NR不会产生任何间距。

\documentclass[10pt,a4paper]{article}
\usepackage{microtype}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage{enumitem}
\title{Fy 1001 - Mekanisk Fysikk \\ Øving 8}
\usepackage{changepage}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{calc}

\newcounter{opg}[section]
\renewcommand{\theopg}{\arabic{opg}}
\newcommand{\opg}[1]{\stepcounter{opg} \subsubsection*{Oppgave \theopg #1}     \vspace*{2.25mm}}
\setcounter{opg}{0}

\newcounter{navn}[opg]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{\stepcounter{navn}\paragraph*{\thenavn)}}
\setcounter{navn}{0}

\newcommand{\NR}[1]
{
\hspace*{-6.1mm} \noindent \begin{minipage}[t]{0.055 \textwidth}
\navn \hspace{0pt}
\end{minipage}
\begin{minipage}[t]{\textwidth}
#1
\end{minipage}
}

\author{Øistein Søvik}

\date{\today}

\begin{document}
\maketitle

\opg{: Kjerrehjul} 
%
\NR{Bestem treghetsmomentet $I_s$ for ei tynn stang med lengde $R$ og masse     $m$, om en akse normalt på stanga
gjennom stangas ene ende.}

\NR{Bestem deretter treghetsmomentet $I_k$ for et kjerrehjul med $N$ eiker     (spiler), hver med masse $m$ og lengde
$R$, og der selve hjulet (felgen) har masse $M$. Du kan betrakte felgen som     en tynn ring med radius $R$.}

\NR{Hva blir kjerrehjulets totale kinetiske energi K dersom det sitter på ei     kjerre som kjører med hastighet
$V$ ? Vi antar ren rulling for kjerrehjulet}    \opg{: Treghetsmoment for diverse stive legemer} 

Bestem treghetsmomentet $I_0$ om en akse gjennom tyngdepunktet/massesenteret til         \NR{ei tynn stang med lengde $L$ og masse $M$. (Akse normalt på stanga.)}    \NR{et tynt kuleskall med radius $R$ og masse $M$. (Tips: $\sin^3 x =     \frac{3}{4} \sin x - \frac{1}{4} \sin 3x$.)}    \NR{ei kompakt kule med radius $R$ og masse $M$. (Tips: Kompakt kule = sum av     tynne kuleskall.} \\
\end{document}

答案1

代码比较长,请将代码保存为goodlists.sty

\ProvidesPackage{goodlists}
\makeatletter
\newtoks\@enLab  %\newtoks\@enfont
\def\@enQmark{?}
\def\@enLabel#1#2{%
  \edef\@enThe{\noexpand#1{\@enumctr}}%
  \@enLab\expandafter{\the\@enLab\csname the\@enumctr\endcsname}%
  \@enloop}

%% Hack to define a space 
\def\@enSpace{\afterassignment\@enSp@ce\let\@tempa= }
\def\@enSp@ce{\@enLab\expandafter{\the\@enLab\space}\@enloop}
\def\@enGroup#1{\@enLab\expandafter{\the\@enLab{#1}}\@enloop}
\def\@enOther#1{\@enLab\expandafter{\the\@enLab#1}\@enloop}
\def\@enloop{\futurelet\@entemp\@enloop@}

\def\@enloop@{%
  \ifx A\@entemp         \def\@tempa{\@enLabel\Alph  }\else
  \ifx a\@entemp         \def\@tempa{\@enLabel\alph  }\else
  \ifx i\@entemp         \def\@tempa{\@enLabel\roman }\else
  \ifx I\@entemp         \def\@tempa{\@enLabel\Roman }\else
  \ifx 1\@entemp         \def\@tempa{\@enLabel\arabic}\else
  \ifx \@sptoken\@entemp \let\@tempa\@enSpace         \else
  \ifx \bgroup\@entemp   \let\@tempa\@enGroup         \else
  \ifx \@enum@\@entemp   \let\@tempa\@gobble          \else
                         \let\@tempa\@enOther
             \fi\fi\fi\fi\fi\fi\fi\fi
  \@tempa}

\newlength{\@sep} \newlength{\@@sep}

\setlength{\@sep}{.5\baselineskip plus.2\baselineskip
            minus.2\baselineskip}

\setlength{\@@sep}{.1\baselineskip plus.01\baselineskip
            minus.05\baselineskip}

\providecommand{\sfbc}{\rmfamily\upshape}

\providecommand{\sfn}{\rmfamily\upshape}

\def\@enfont{\ifnum \@enumdepth >1\let\@nxt\sfn \else\let\@nxt\sfbc \fi\@nxt}


\def\enumerate{%
   \ifnum \@enumdepth >3 \@toodeep\else
      \advance\@enumdepth \@ne
      \edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi
   \@ifnextchar[{\@@enum@}{\@enum@}}

\def\@@enum@[#1]{%
  \@enLab{}\let\@enThe\@enQmark
  \@enloop#1\@enum@
  \ifx\@enThe\@enQmark\@warning{The counter will not be printed.%
   ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi
  \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}%
  \expandafter\let\csname the\@enumctr\endcsname\@enThe
  \csname c@\@enumctr\endcsname7
  \expandafter\settowidth
            \csname leftmargin\romannumeral\@enumdepth\endcsname
            {\the\@enLab\hskip\labelsep}%
  \@enum@}

\def\@enum@{\list{{\@enfont\csname label\@enumctr\endcsname}}%
           {\usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}%
     \ifnum \@enumdepth>1\setlength{\topsep}{\@@sep}\else
           \setlength{\topsep}{\@sep}\fi
     \ifnum \@enumdepth>1\setlength{\itemsep}{0pt plus1pt minus1pt}%
      \else \setlength{\itemsep}{\@@sep}\fi
     %\setlength\leftmargin{\leftMargin}%%%{1.8em}
     \setlength{\parsep}{0pt plus1pt minus1pt}%
     \setlength{\parskip}{0pt plus1pt minus1pt}
                   }}

\def\endenumerate{\par\ifnum \@enumdepth >1\addvspace{\@@sep}\else
           \addvspace{\@sep}\fi \endlist}
\makeatother

然后用这个最小值尝试一下,通过改变枚举后的选项,你可以改变列表枚举,即改变\begin{enumerate}[1.)]会给你数字,改变为[a)],字母编号等等,它会按照你想要的方式缩进:

\documentclass{article}
\usepackage{goodlists}
\begin{document}
\begin{enumerate}[a)]
 \item The enumerate environment starts with an optional
   argument `1.', so that the item counter will be suffixed
   by a period.
 \item You can use `a)' for alphabetical counter and '(i)' for
   roman counter.
  \begin{enumerate}[1)]
    \item Another level of list with alphabetical counter.
    \item One more item before we start another.
    \begin{enumerate}[(i)]
     \item This item has roman numeral counter.
     \item Another one before we close the third level.
    \end{enumerate}
    \item Third item in second level.
  \end{enumerate}
 \item All list items conclude with this step.
 \end{enumerate}
\end{document}

相关内容